vector的迭代器失效問題有兩種情況
1.erase使迭代器失效
通過迭代器得到改元素的位置,erase掉該元素,再通過迭代器訪問該位置就會出現非法訪問。
2.insert使迭代器失效
insert操作可能會導致vector增容,從而申請新的空間,釋放舊的空間,原來的迭代器還是指向原來舊的空間,繼續訪問就是非法。
請看代碼
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int a[] = { 1, 2, 3, 4 };
vector<int> v(a, a + sizeof(a) / sizeof(int));
//使用find找到3所在的位置
vector<int>::iterator pos = find(v.begin(), v.end(), 3);
//1.
//刪除pos位置的數據,導致pos迭代器失效。
//v.erase(pos);
//cout << *pos << endl;//此時會非法訪問
//2.
//在pos位置插入數據,導致pos迭代器失效
//insert會導致迭代器失效,是因爲insert可能會導致增容,
//增容後pos還指向原來的空間,而原來的空間已經被釋放掉
//pos = find(v.begin(), v.end(), 3);
//v.insert(pos, 30);
//cout << *pos << endl;//此處非法訪問
return 0;
}