怎么将 迭代器的指针转换成 DWORD

如何将 迭代器的指针转换成 DWORD
list <   PERSONINFO   > ::iterator     it;
it   =   m_FriInfo_list.begin();
for(;   it!=   m_FriInfo_list.end()   ;   ++it)
{
if(   0   ==   strcmp(     (*it).UserId   ,   Add_OK.userID)       )
{
pit   =   (DWORD   )   (it);
                                      }
                    }
    我这样做就报错 'type   cast '   :   cannot   convert   from   'class   std::list <struct   PERSONINFO,class   std::allocator <struct   PERSONINFO>   > ::iterator '   to   'unsigned   long '
                No   user-defined-conversion   operator   available   that   can   perform   this   conversion,   or   the   operator   cannot   be   called

  告诉我该怎么办


------解决方案--------------------
没办法。list的iterator不是指针,是一个类对象,根本就不保证它会小于等于4字节。
------解决方案--------------------
看《STL源码剖析》
------解决方案--------------------
建议你看一下侯 SIR 的 《STL源码剖析》
里面都是讲 STL 的底层实现的

------解决方案--------------------
换换思想这样就可以了


int _tmain(int argc, _TCHAR* argv[])
{
list <int> IntList;
IntList.push_back(100);

list <int> ::iterator it = IntList.begin();


DWORD p = reinterpret_cast <DWORD> (&(*it));

int v = *(int*)p;

std::cout < <v < <endl;


return 0;
}


------解决方案--------------------
pit = (DWORD ) (it);

改成
pit = (DWORD ) (&(*it));

*it取得list中的那个元素,它的地址也是你想要的地址.

PS:你想直接把it当成指针直接转换这是不可取的,跌代器和指针是有区别的,跌代器本身是一个对象,它重载了*,-> ,所以给人感觉它好象是指针,其实它不是.想得到它指向的元素的地址可以用上面的方法.
------解决方案--------------------
汗~~~~~~~~~~~~~~`

迭代器是个类

指针转换为一个类对象??? 完全逻辑不通
------解决方案--------------------
pit = (DWORD ) (it);
----------
楼主的需求说清楚,为什么要这么做
如果只是想保存符合条件的位置,就再用一个迭代器好了,不用转换成DWORD类型的整型的
it2 = it;
------解决方案--------------------
DWORD pIt = reinterpret_cast <DWORD> (&(*it_) );
--------
这个只是把第一个元素的地址强制转换为DWORD而已,难道没问题吗?DWORD只有两个字节,不够存放地址的吧
------解决方案--------------------
那你为什么要保留iterator呢?直接存数据的指针即可。