我有点困惑。我了解到或被告知的是,如果调用删除, vector 的迭代器将变得无效。但为什么下面的代码有效。它使用g++编译并在Linux中运行。
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vector<int>::iterator it = vec.begin();
++it;
vector<int>::iterator it2;
it2 = vec.erase(it);
cout << "it: " << *it << endl;
cout << "it2: " << *it2 << endl;
}
感谢您的反馈!
最佳答案
来自http://www.cplusplus.com/reference/stl/vector/erase/ (不是世界上最好的 C++ 引用):
This invalidates all iterator and references to position (or first) and its subsequent elements.
所以它
是无效的;使用它会导致未定义的行为。事实上,你碰巧得到了你所期望的东西,这纯粹是运气不好。
关于c++ - 调用删除后迭代器无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310263/