在C++中erase函数的参数都是迭代器,假如当前是用反向迭代器遍历元素怎么办呢,我在下面给出例子和解决方法,代码已经通过测试。
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
vector<int>test = { 1,2,2,2,3,4,2,3,2,2,63,2,99,2,2,1};
for (auto it = test.rbegin(); it != test.rend();) {
if (*it == 2) { // 删除值为2的元素
int index = test.rend() - it - 1; // 通过反向迭代器计算出索引
it++; // 向前走一步
test.erase(test.begin() + index); // 通过迭代器来删除元素
} else {
it++;
}
}
for (auto it = test.begin(); it != test.end(); it++) {
cout << *it << " ";
}
return 0;
}
上述代码中,这三行是重点:
int index = test.rend() - it - 1; // 通过反向迭代器计算出索引
it++; // 向前走一步
test.erase(test.begin() + index); // 通过迭代器来删除元素
这个代码可以删除vector中值为2的元素,并且无论怎么修改vector的元素,结果都是满足预期的,大家可以动手尝试。