关于vector iterator not incrementable的解决方案
来源:互联网 发布:上海心动网络 校招 编辑:程序博客网 时间:2024/06/16 05:40
第一次写博客,突然有点小紧张。
不算是什么原创内容,也算是网上找到的各种答案,总结一下吧。
在使用迭代器时还是有很多问题要注意的,稍不注意,就会出现恶心的runtime error。这些错误不像一般的error那么友好,他们不会提示哪里出错。
1.在erase元素的时候,应该注意迭代器越界的问题,如
for (auto it = vec.begin(); it != vec.end(); ++it){
if (*it == 2) vec.erase(it);
}
这样的写法是错误的。
在执行完erase操作后,原来的迭代器it就失效了,其行为是不可预测的。
而erase操作会返回下一个迭代器,所以正确的做法应该是
for (auto it = vec.begin(); it != vec.end(); ){
if (*it == 2)
it = vec.erase(it);
else
++it;
}
2.另一个出现incrementable的原因是, 在进行迭代器遍历容器时,原来的容器不应该再继续压入任何元素了,不然容器的长度变了,迭代器就失效了。
补救的方法是,每次压入vector时,都把迭代器重置
for (auto it = vec.begin(); it != vec.end(); ++it){
vec.push_back(1);
it = vec.begin();
}
但是这样造成的死循环问题也要避免。
还有就是对于STL的使用还不熟,稍微一不注意就会踩坑。
准备抽个时间系统的学习下。
0 0
- 关于vector iterator not incrementable的解决方案
- vector iterator not incrementable
- vector iterator not incrementable
- vector iterator not incrementable 的问题
- iterator not incrementable 解决方案
- vector iterator not incrementable错误解决
- 关于错误map/set iterator not incrementable
- C++ 使用vector 出现"vector iterator not incrementable"或"vector iterator + offset out of range"错误的情况
- list iterator not incrementable
- List Iterator Not Incrementable
- string iterator not incrementable
- map/set iterator not incrementable
- map/set iterator not incrementable
- c++ list iterator not incrementable
- 迭代器失效 iterator not incrementable
- C++学习之路(14)---vector报错:vector iterator not incrementable"或"vector iterator + offset out of range"
- C++ list iterator not incrementable 不是erase的情况
- vs2005里List Iterator Not Incrementable
- 同步锁和独占锁
- java-基础-装箱与拆箱
- php导出excel小结
- 实例学习ansible系列(1)Helloworld
- tomcat源码编译
- 关于vector iterator not incrementable的解决方案
- Service Intent must be explicit: Intent
- \n 刷新缓冲区问题
- C#学习
- 【EF映射】EF原理及延迟加载
- Codevs 1536 海战 (DFS || BFS)+判断
- 查找算法、选择算法——LeetCode
- String,StringBuffer与StringBuilder的区别|线程安全与线程不安全
- 内存的五大分区