List的用法小探

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

申请这个blog已经很久了。今天终于静下心来,写点东东。

近期在做2D游戏的开发。

在程序中很多地方用到了List。现在就来简单的谈一谈。做个开始。 :)

我们经常需要遍历一个List。

如下:

struct sItem

{

int x;

int y;

};

typedef list<sItem> lsItem;

typedef list<sItem>::iterator iterItem;

lsItem myList;

for( iterItem iter=myList.begin(); iter!=myList.end(); iter++ )

{

sItem* pItem = (sItem*)&(*iter);

//pItem->x........

}

这种方法用的很普遍。

但是,如果我们在遍历得过程中需要对list进行增加或者删减呢?

for( iterItem iter=myList.begin(); iter!=myList.end(); iter++ )

{

sItem* pItem = (sItem*)&(*iter);

if( pItem->x == 1)

myList.erase( iter );

}

这种方式显然会出错!因为erase(iter)后,iter已经不知道指向何处。

所以我们可以来使用:

iterItem iter = myList.begin();

while( true )

{

if( myList.empty() || iter==myList.end() )

break;

iterItem iterNext = iter;

iterNext++;

//对此节点进行处理

if( pitem->x == 1 )

myList.erase( iter );

iter = iterNext;//继续处理下一个节点

}

好了,今天先写到这。

稍后,将放上<<在DirectX中怎么创建自己得类似Windows里面的Control>>。

如有纰漏,请大家指正。 :)

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