我很困惑。我学到或被告知的是,如果调用擦除,则向量的迭代器将变为无效。但为什么下面的代码工作。它使用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;
}
感谢您的任何反馈!
它“有效”,即它显示UB没有明显的症状。 – PlasmaHH 2012-02-16 11:13:41
定义“代码工程”。做你所期望的是一个可能的结果_ [未定义的行为](http://stackoverflow.com/a/1553407/140719)_。 – sbi 2012-02-16 11:15:13
当你使用gcc时,试着用'-D_GLIBCXX_DEBUG'运行,你就会开悟。希望。 – PlasmaHH 2012-02-16 11:18:48