我剛這樣的代碼:分配(操作者=)無效迭代器容器
std::vector<int> v1 = { 1, 2, 3, 4 };
std::vector<int> v2 = { 7, 8, 9, 10 };
std::vector<int>::iterator it = std::next(v1.begin());
v1 = v2;
int test = *it;
std::cout << test;
上面的代碼將引發錯誤:迭代不dereferencable。
但是,如果我用替換列表向量如下:
std::list<int> v1 = { 1, 2, 3, 4 };
std::list<int> v2 = { 7, 8, 9, 10 };
std::list<int>::iterator it = std::next(v1.begin());
v1 = v2;
int test = *it;
std::cout << test;
的代碼只是跑預期沒有錯誤。
從Iterator invalidation rules和std::list::operator=,在調用operator =之後我被告知,除了結束迭代器之外,與此容器相關的所有迭代器,引用和指針都將失效。但爲什麼上面的代碼與std :: list的作品?我誤解了一些重要的東西嗎?
即使它似乎是「正常」它隨時可能一觸即發,沒有任何形式的通知。 –