注意 c++ vector中的erase()
来源:互联网 发布:sql 关键字书写顺序 编辑:程序博客网 时间:2024/05/23 02:03
今天帮同事解决了一个程序异常挂掉的问题,最后定位到是在vector删除元素之后,再把该对象传递给下一个app时下一个app莫名其妙的挂了。认真检查了代码发现是这里的问题。网上有个帖子,讲的挺细致的,特转载写。
#include <iostream>#include <vector>using namespace std; int main(){ vector<int> arr; arr.push_back(6); arr.push_back(7); arr.push_back(8); arr.push_back(9); for(vector<int>::iterator it=arr.begin(); it!=arr.end(); ) { if(* it == 8) { it = arr.erase(it); } else { ++it; } } // 注意上面不能写成 /* for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++) { if(* it == 8) { arr.erase(it); //it失效,并不指向下一个元素,成了“野指针”。 } } */ cout << "After remove 8:\n"; for(vector<int>::iterator it = arr.begin(); it < arr.end(); ++it) { cout << * it << " "; } cout << endl << arr.size(); cout << endl;}
还有一个示例,看了就更清楚了:
void fun(){ vector<int> iVec; vector<int>::iterator it; for(int i=0;i<10;i++) iVec.push_back(i); display(iVec); for(it=iVec.begin();it!=iVec.end();++it) { if(*it ==4 || *it == 7) { it=iVec.erase(it); } else { ++it; } } display(iVec);}//例如上面这个 1 2 3 4 5 6 7 8 9//如果要删除4 和7 两个元素//则删除4后iterator返回5,不满足if()判断,这时++it执行两次,一次是else里面,一次是for()循环里面,导致7被错过//实际上,应该是这样的void fun(){ vector<int> iVec; vector<int>::iterator it; for(int i=0;i<10;i++) iVec.push_back(i); display(iVec); for(it=iVec.begin();it!=iVec.end();++it) { if(*it ==4 || *it == 7) { it=iVec.erase(it); --it;//这里回退一个 } } display(iVec);}
- 注意 c++ vector中的erase()
- vector中的erase用法注意
- 注意 c++ vector中的erase()
- vector erase注意
- C++primer学习-vector中的erase函数
- vector中的erase注意事项
- vector中的erase用法注意事项
- STL vector中的erase方法(26)
- hackerrank>Dashboard>C++>STL>Vector-Erase
- erase vector
- vector erase
- vector erase
- vector erase
- Vector-Erase
- 注意vector, list, set, map成员函数erase
- 注意vector, list, set, map成员函数erase
- 注意vector, list, set, map成员函数erase
- 注意vector, list, set, map成员函数erase
- VisualStudio使用技巧
- 重复数据删除的算法
- Redis内存存储结构分析
- Dom4j教程
- ssh整合步骤之二(架构设计)
- 注意 c++ vector中的erase()
- Runtime 异常和Checked异常
- 派生类StudentB对基类StudentA的继承
- 页面处理json数据
- popcount或者hamming weight(二进制1的个数问题)
- 用SendARP()获取对方的MAC地址
- 关于方程a^x=1(mod m)的最小x解
- TCP字节流与UDP数据报
- 第十三周--项目2-采用多重继承方式由Teacher类和Cadre类派生出Teacher_Cadre