Vector erase操作 core down
来源:互联网 发布:放逐之城 修改数据 编辑:程序博客网 时间:2024/06/07 00:29
- Vector erase操作 core down
- 复现代码
- 第一个坑
- 还有坑
- 改进代码
Vector erase操作 core down
复现代码
for(std::vector<int>::iterator iter=uid.begin(); iter!=uid.end(); iter++) { if( *iter == temp_uid) { iter = uid.erase(iter); } }
第一个坑
vector的删除操作会有一个坑,就是删除的时候一定要将删除操作的结果赋值给一个新的迭代器。
因为执行erase操作之后,执行操作的iter会变的无效。这时应该使用erase的返回结果,返回结果是被删除元素的下一个位置。
所以操作必须是这样的
iter = uid.erase(iter);
还有坑
然而这样服务启动还是core了,single 11
这是为什么呢
当满足删除要求的是最后一个元素时,问题就出现了。例如上面的例子里,当删除最后一个元素的时候,返回的迭代器就指向了end。
按照for循环的执行逻辑,先判断条件,然后执行,最后执行递增进入下一次循环。
于是对返回的迭代器递增,这时候迭代器已经飞起来了(不知道指向哪里),新一轮循环开始,判断迭代器是否指向end,肯定不满足,接着执行循环体,此时越界了。
改进代码
for(std::vector<int>::iterator iter=uid.begin(); iter!=uid.end(); ){ if( *iter == temp_uid) { iter = uid.erase(iter); }else iter++;}
递增逻辑由自己实现,命中删除操作的时候不进行iter++。这样就没问题了。
阅读全文
0 0
- Vector erase操作 core down
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- STL vector的erase操作问题
- vector删除操作 erase方法注意事项
- STL vector等容器erase操作
- erase vector
- vector erase
- vector erase
- vector erase
- Vector-Erase
- vector的iterator进行erase操作后报错vector iterators incompatible
- 关于vector的erase操作后,迭代器失效问题
- vector 的删除操作pop_back、erase效率对比
- 关于list容器与vector容器中的erase操作
- C++ vector容器erase操作后iterate失效真相
- 【好书推荐】程序员的数学 pdf 1-2-3
- NOIP 2016 天天爱跑步
- chunk在nodejs中的体现
- 广告相关的一些名词
- req.accepts(types)
- Vector erase操作 core down
- shiro学习感触
- python查新一年中的几号是这一年的多少天
- 神经网络相关好文
- mysql学习记录:触发器
- @Controller,@RestController ,@ResponseBody的区别
- iOS 图片上传被后台给旋转了90度
- Loadrunner回放脚本时报错Action.c(41): Error -27979: Requested form not found [MsgId: MERR-27979]
- python itertools.product的用法