迭代器失效

Microsoft777 2008-06-06 03:13:01
我们如何解决迭代器失效呢?
答:用另外一个迭代器拷贝。
但是这样很浪费空间,还有什么更好的办法吗?
对了,当初设计的时候为什么要让迭代器失效呢?
...全文
346 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程夜猫 2008-09-08
  • 打赏
  • 举报
回复
STL标准模板库(候捷版)里迭代器一切也讲过为什么要失效。楼主好好看看
fengyizi 2008-09-08
  • 打赏
  • 举报
回复
重新在对象上获得新的有效的迭代器啊。
保存什么啊,保存的也是错误的。失效的。
lsm164 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 matrixdwy 的回复:]
erase不是会返回一个iterator吗?就用这个返回值重新赋值不就得了
[/Quote]
pengzhixi 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yshuise 的回复:]
迭代器失效的方法很简单,就是重新计算:

C/C++ codevector<int> r;
r.begin(); //用这个
r.end(); //用这个重新
[/Quote]
这个应该是比较好的方法
iambic 2008-09-07
  • 打赏
  • 举报
回复
楼上的是不是打错字了?
richbirdandy 2008-09-07
  • 打赏
  • 举报
回复
你的答就错了 看7楼和9楼
iambic 2008-09-07
  • 打赏
  • 举报
回复
要先明白为什么会失效。
matrixdwy 2008-09-07
  • 打赏
  • 举报
回复
erase不是会返回一个iterator吗?就用这个返回值重新赋值不就得了
xiaoyisos 2008-09-07
  • 打赏
  • 举报
回复
容器真是好东西啊 ~~
yshuise 2008-06-06
  • 打赏
  • 举报
回复
迭代器失效的方法很简单,就是重新计算:
vector<int> r;
r.begin(); //用这个
r.end(); //用这个重新
jieao111 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Microsoft777 的回复:]
引用 2 楼 taodm 的回复:
去看《effective STL》

具体看哪里啊?
[/Quote]

名字好象是怎么删除有效一类,,,讲了失效的解决方法,,

对了,当初设计的时候为什么要让迭代器失效呢?

不能面面俱到,总会有不足,取舍之后就有失效了

herman~~ 2008-06-06
  • 打赏
  • 举报
回复
我们如何解决迭代器失效呢?
答:用另外一个迭代器拷贝。
但是这样很浪费空间,还有什么更好的办法吗?

迭代器拷贝为了预防失效
Microsoft777 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]
去看《effective STL》
[/Quote]
具体看哪里啊?
ysuliu 2008-06-06
  • 打赏
  • 举报
回复
只要erase中间的元素,基本都会发生失效,这个不是设计的问题,你只要用容器迭代器,只要存在删除,插入等操作,失效不可避免。重要的还是能随时发现失效的迭代器,作出正确的处理
taodm 2008-06-06
  • 打赏
  • 举报
回复
去看《effective STL》
qhfu 2008-06-06
  • 打赏
  • 举报
回复
一般迭代器失效 可能是节点被erase,所以需要一个copy.

64,641

社区成员

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

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