如何判断一个STL迭代器是否还有效?

mxzy55560593 2012-07-05 11:36:33
问题是我保存了一个容器的iterator,但这个迭代器指向的元素可能已经被erase了
我再对这个iterator做任何操作都会崩溃,求助我如何判断这个iterator指向的元素是否还存在?
谢谢
...全文
3128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
STL里面的东西似乎都没有为并行做特殊设计。

如果你自己单线程里迭代并同时修改,那可以认为你的代码有问题。

如果是多线程环境,那就需要自己用锁做保护,或者设计支持并行的类(实质是把锁设计在类的内部,但有了锁显然会影响效率)。
qq120848369 2012-07-05
  • 打赏
  • 举报
回复
存一个vector<iterator>, erase之前先去vector里find那个erase掉。

判断是否有效就去vector里找,找到则有效。

可惜,这样做真的值得吗。
IVERS0N 2012-07-05
  • 打赏
  • 举报
回复
无法检查迭代器是否还有效
mc913 2012-07-05
  • 打赏
  • 举报
回复
迭代器相当于一个指针
请问楼主听说过“刻舟求剑”么?
swlilike 2012-07-05
  • 打赏
  • 举报
回复
try
{
}
catch(...)
{
}

想不崩溃试试也行
pathuang68 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

STL没办法检查迭代器是否失效,因为这些都是程序员自己应该避免的
[/Quote]

++,就是这个说法。
pengzhixi 2012-07-05
  • 打赏
  • 举报
回复
STL没办法检查迭代器是否失效,因为这些都是程序员自己应该避免的
Star-light 2012-07-05
  • 打赏
  • 举报
回复
那就用不会失效的容器。。。
比如list,boost::stable_vector
W170532934 2012-07-05
  • 打赏
  • 举报
回复
一般在Begin和End迭代器之间的都算是有效的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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