C++ vector 删除
2011-12-26 22:08
162 查看
标签:C++vector
erase
点击打开原文链接
erase
#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); //在erase后,it失效,并不是指向vector的下一个元素,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); } l例如上面这个 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中的元素
- C++ stl list、map、vector删除元素
- C++中的Vector 的删除操作
- C++:STL:vector删除元素
- 实战c++中的vector系列--可怕的迭代器失效之二(删除vector中元素)
- 【c++系列】vector查找指定元素并删除
- C++中删除vector容器中元素的三种方法及其区别
- 实战c++中的vector系列--可怕的迭代器失效之二(删除vector中元素)
- C++ vector 根据元素值删除
- c++ vector删除元素
- C++ vector 删除一个指定元素 和 find 一个指定元素
- c++如何遍历删除map/vector里面的元素
- C++中vector和set删除一亿个数字中的奇数
- C++ vector容器删除操作
- c++ vector删除元素
- c++ vector erase删除元素
- C++ vector一边遍历一边删除元素
- C++ 有关STL中容器vector的操作 初始化 遍历 删除
- C++ Vector 删除指定元素
- c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件