今天,终于发现了解决昨天项目中遗留的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。
问题解决!