vector迭代器erease操作问题
来源:互联网 发布:苏宁售后知乎 编辑:程序博客网 时间:2024/06/15 18:58
最近在写一个作业题,其中用到了vector的erase操作,不常用,不记得具体怎么回事了,偷个懒,网上搜了一下,直接照抄了,代码如下
- vector<mission>::iterator itr = vm.begin();
- while (itr != vm.end())
- {
- if ((*itr).getStartTime() <= nowTime)
- {
- vm.erase(itr);
- }
- itr++;
- }
但奇怪的是,运行的时候,每次到这段代码里面,都会直接弹出错误框,看样子是迭代器失效了,指到了不该指的地方
反复看代码,觉得vector为空的时候不可能调用,也不可能指向超过末尾的地方,郁闷半天。。。。只好广泛查阅。。。。
终于。。。找到了原因所在,哎,偷懒的代价啊偷懒的代价啊。。。。
错在不了解erase,网上那哥们儿估计也不了解。。。给出的代码还被人评为最佳答案。。。误人不浅
正确写法应该如下
- vector<mission>::iterator itr = vm.begin();
- while (itr != vm.end())
- {
- if ((*itr).getStartTime() <= nowTime)
- {
- itr = vm.erase(itr);
- }
- else
- {
- itr++;
- }
- }
原因是因为在erase操作后,原迭代器是相当于一个野指针的状态,对其++必定出错。
erase的返回值就是指向被删除的元素的下一个元素的迭代器,嚯嚯
还有分析称,其实非野,也会出BUG,vector在erase之后,长度会自动缩减,再++的话,会跳过一个元素,BUG,呵呵
转自: http://blog.csdn.net/mqstreetball/article/details/6003935
- vector迭代器erease操作问题
- 用erease删除vector里的元素
- CCF_ 连续叫号 20171202—erease(Vector和 Map)
- 关于vector的erase操作后,迭代器失效问题
- vector迭代器失效问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- vector操作
- vector 操作
- vector操作
- vector操作
- 两个诡异的vector迭代器操作错误!
- 二维vector,clear()操作请慎重,当心遇到vector subscript out of range问题
- 关于使用vector迭代器出现的问题
- vector和map的迭代器失效问题
- 博客收藏导出——基于CSDN博客导出工具的扩展
- CDocManager
- 测试Jboss5与ActiveMQ5整合
- java实现回溯法解n皇后问题
- 杭电ACM HDU 2203 亲和串
- vector迭代器erease操作问题
- 第九章 关系映射 一对一关系 唯一外键方式实现一对一
- 2013年6月1日
- 成对的字符串
- 跟我一起写 Makefile(九)
- Oracle体系结构及备份(三)——user-process
- 泛型的使用场景
- 改变MFC默认文档操作方式
- java中注解