我很困惑。我學到或被告知的是,如果調用擦除,則向量的迭代器將變爲無效。但爲什麼下面的代碼工作。它使用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