游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3131|回复: 5

stl list.remove()的问题~

[复制链接]

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2007-1-13 00:01:00 | 显示全部楼层 |阅读模式
std::list<CSceneNode *>objectList;
......初始化等等.......

//RemoveObj():
std::list<CSceneNode *>::iterator objIterator;
for(objIterator = objectList.begin(); objIterator!=objectList.end(); objIterator++)
{
    if (( *objIterator)->size <1.0f)
   {
        objectList.remove(*objIterator);
   }       
}

代码如此.执行时就有问题.初学LIST,不清楚remove里做了什么.网上查了,也是闹了个一头雾水.
高手们帮小弟改改看看~ [em5]

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-1-13 03:27:00 | 显示全部楼层

Re: stl list.remove()的问题~

应该清楚list就是链表,节点本身除了数据之外还有指向下一个节点的指针(或者索引)。
你得到节点,然后删除他。在删除数据的同时,这个节点的指针已经失效。
虽然STL仍然帮你把链表重新组织好,但此时指向当前节点的迭代器已经失效。所以在向下遍历时候会出错。
你忘了删除数据本身会影响数据结构了!

简单的修改是


在循环中删除元素,要使迭代器重新归位。


  1. for ( it= v.begin();it != v.end(); it++)
  2. {
  3.    it = v.erase(it);

  4. }

复制代码

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2007-1-13 11:25:00 | 显示全部楼层

Re:stl list.remove()的问题~

哦!好 ~谢谢~

17

主题

258

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2007-1-14 13:14:00 | 显示全部楼层

Re:stl list.remove()的问题~

不知道这样行不行,还有就是erase和remove的区别在哪里?
for(objIterator = objectList.begin(); objIterator!=objectList.end(); )
{
    if (( *objIterator)->size <1.0f)
   {
        objectList.remove(*objIterator);
   }
  else
  {
    objIterator++
  }
}

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-14 13:32:00 | 显示全部楼层

Re:stl list.remove()的问题~

erase作用于iterator,remove作用于值。

如fruit.erase("orange");会删除fruit中所有值为orange的元素。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-1-15 10:03:00 | 显示全部楼层

Re:stl list.remove()的问题~

如果非要使用remove的话,可以临时创建一个tobeDeletedList来储存:
for(objIterator = objectList.begin(); objIterator!=objectList.end(); objIterator++)
{
    if (( *objIterator)->size <1.0f)
   {
        tobeDeletedList.insert(*objIterator);
   }
}

for(objIterator = tobeDeletedList.begin(); objIterator!=tobeDeletedList.end(); objIterator++)
{
        objectList.remove(*objIterator);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 06:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表