c++vector迭代器失效問題

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章