写代码时用 for 循环删除 vector 中的元素发现总是报错,后来最细看了下 erase() 方法发现 erase()方法使用后原来的迭代器失效,返回新的迭代器。
正确的使用方法是:
#include <iostream>#include <vector>using namespace std;
int main(){vector<int> v = { 0, 1, 2, 3 };for (vector<int>::iterator it = v.begin(); it != v.end();){if (*it == 2){it = v.erase(it);//cout << *it << endl;//break;}else{++it;}}for each (int var in v){cout << var;}cout << endl;system("pause");return 0;}
输出:0, 1, 3
algorithm 库还有一个相似的方法 remove(),使用方法如下:
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){vector<int> v = { 0, 1, 2, 3 };remove(v.begin(), v.end(), 2);for each (int var in v){cout << var;}cout << endl;system("pause");return 0;}
输出:0, 1, 3, 3
长度不变,用最后一个元素填补。