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

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

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

问题解决!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航