免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jiangshang
打印 上一主题 下一主题

迭代器失效问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-06-25 09:22 |只看该作者
原帖由 lzcxh 于 2006-6-25 00:48 发表
问下大虾
关于           mylist.erase(itlist++);
WINDOWS下erase有返回值,返回的是删除位置的下一个元素的iterator,若删除itlist位置的元素后,内存移动,下一个元素的位置就不会是(itlist+1)了吧??


看书,应该是。

论坛徽章:
0
12 [报告]
发表于 2006-06-25 10:25 |只看该作者
原帖由 lzcxh 于 2006-6-25 00:48 发表
问下大虾
关于           mylist.erase(itlist++);
WINDOWS下erase有返回值,返回的是删除位置的下一个元素的iterator,若删除itlist位置的元素后,内存移动,下一个元素的位置就不会是(itlist+1)了吧??


对!

论坛徽章:
0
13 [报告]
发表于 2006-06-25 16:46 |只看该作者
原帖由 jiangshang 于 2006-6-23 16:19 发表
请问,list,map,set几种容器进行删除、插入操作后,迭代器否都失效?
谢谢

上述容器都是节点式存储元素的容器,因此插入操作不会使迭代器失效,而删除操作会使原来指向被删除元素的迭代器失效,对于其它迭代器没有影响。

原帖由 jiangshang 于 2006-6-23 17:29 发表
那么
        list<string>::iterator itlist;

        for(itlist=mylist.begin(); itlist!=mylist.end(); itlist++)
        {
                if(xxxxx)
                        mylist.erase(itlist);
        }
能正确执行么?

元素被删除之后,其原来对应的itlist迭代器已经失效。而使用无效的迭代器(itlist++)是未定义的行为,所以上面的程序是错误的。

论坛徽章:
0
14 [报告]
发表于 2006-06-25 22:03 |只看该作者
精辟

论坛徽章:
0
15 [报告]
发表于 2006-06-27 11:17 |只看该作者

回复 13楼 whyglinux 的帖子

班长说的好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP