对项目中iterator的问题的解决办法

来源:互联网 发布:php addslashes() 编辑:程序博客网 时间:2024/05/01 03:55

    今天,终于发现了解决昨天项目中遗留的list 的iterator遍历的问题。对该问题总结如下:

一、首先定义

//定义数据结构
typedef struct COMPUTER_INFO {
 CString Name;
 CString Type;
 CString Number;
 CString ORValue;
 CString BeginDate;
 CString Year;
 CString Dep;
 CString FromCom;
 CString RepareRec;
 BOOL Remove;
 bool operator == ( COMPUTER_INFO c ) { return c.Number==Number ; }
}COMPUTER_INFO;

typedef list< COMPUTER_INFO > COMPUTER_INFO_LIST;

二、使用问题

举其中一个FindResource函数说明:

/**************************************************/
函数:FindResource
用途:根据计算机编号查找该计算机对应的详细信息
参数:CString Name  //计算机帐号
返回:COMPUTER_INFO* //计算机信息
/**************************************************/
COMPUTER_INFO * CComputerResourceDlg::FindResource( CString number)
{

 //&*v.begin(),
 try {
   COMPUTER_INFO* I;
      COMPUTER_INFO_LIST::iterator pbi;

   for( pbi = m_Computer.begin() ; pbi != m_Computer.end() ; pbi++ ) {
   
   I = &*pbi;
   if( 0==strcmp(number, I->Number) )
    return (COMPUTER_INFO*)(&(*I));

   }
 }catch(...) {
 }
 return NULL;

}

函数中使用的COMPUTER_INFO_LIST::iterator pbi; 只是一个iterator,不能用于直接读取所遍历的数据项的值。两种解决办法:

1、(*pbi)->Number;  但是这个方法在我的vc6.0上没有通过,但同学说在gcc上没有问题。

2、I = &*pbi; 使用一个 COMPUTER_INFO* I;来取得指针,这个方法在vc6.0上通过。

所以,如果要得到list中数据项的指针,需要转换I = &*pbi。

问题解决!


原创粉丝点击