关于list iterators incompatible问题

smile_x 2011-05-16 11:06:27
一个非空的list,我使用了erase()删除list中的一个元素,后面我需要遍历这个list内的所有元素,就会出现list iterators incompatible。我一步步检查的时候也没有出什么问题。这是为什么?应该如何解决这个问题?
...全文
1106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
树哥 2013-09-28
  • 打赏
  • 举报
回复
移除迭代器的元素时,会使迭代器失效,如下: 错误的用法: for (list<int>::iterator iTer = lstData.begin(); iTer != lstData.end(); ++iTer) { if (某条件) lstData.erase(iTer);//此时iTer已经失效,无法进行++操作 else //正常遍历 } 正确的用法: for (list<int>::iterator iTer = lstData.begin(); iTer != lstData.end(); ) { if (某条件) lstData.erase(iTer++); else //正常遍历 ++iTer; }
easy_fefrry 2013-07-02
  • 打赏
  • 举报
回复
我也是这个问题,求答案!
b_cup 2013-04-05
  • 打赏
  • 举报
回复
对于vecotr/list当你删除或插入元素后,原有的迭代器就失效了,所以,你遍历元素时就会出现“list iterators incompatible”的错误。 其实erase函数返回值是当前元素的下一个元素的迭代器,用“chenkang_apple123”的方法可以解决你的问题。
chenkang_apple123 2011-12-19
  • 打赏
  • 举报
回复
it = erase(it) ;
yelloworange 2011-05-16
  • 打赏
  • 举报
回复
能不能说的详细些?怎么遍历的?我估计是你在对list的迭代器,也就是你的数据处理的时候有问题,应该不是list类函数的问题,可能你释放了指向某个数据的指针之类的吧,你单步调试跟踪看看吧,其实我也不是很懂...

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧