無法通過迭代器++,–操作遍歷整個stl容器。記作: 第一層失效。● insert(i, value)無法通過迭代器訪問迭代器所指向的記憶體。 記作: 第二層失效。
在迭代器i前插入乙個元素value, 返回指向value迭代器
● erase(i)
刪除迭代器i位置的元素, 返回指向後乙個元素的迭代器
● i = insert(i, value)
● i = erase(i)
造成失效的原因是因為記憶體的重新分配, 保留下來的迭代器不再指向容器中原來的元素…
//erase操作
#include#includeusing namespace std;
int main();
int cnt = 0;
int flag = 0;
for(vector::iterator i = q.begin(); i != q.end(); ++i); // c++11列表初始化
vector::iterator j = q.begin();
j++;
cout<<"第二個元素:"<<*j<::iterator i = q.begin(); i != q.end(); ++i);
q.push_back(11);
cout<<"初始vector分配的容量:"<::iterator i = q.begin(); i != q.end(); ++i)
if(*i == 3&&!flag)
cout << *i << endl;
cout << &(*i) << endl;
}return 0;
}
初始vector分配的容量:20
1 0x1f2188
2 0x1f218c
插入元素後vector分配的容量:20
220x1f2190
3 0x1f2194
4 0x1f2198
5 0x1f219c
6 0x1f21a0
7 0x1f21a4
8 0x1f21a8
9 0x1f21ac
100x1f21b0
110x1f21b4
STL容器迭代器失效之案例 vector
對於序列式容器 如vector,deque 序列式容器就是陣列式容器,刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vetor,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。所以不能使用erase iter 的方式,還好erase方...
STL 容器與迭代器
迭代器 迭代器是泛化的指標 但並不是指標 用法和指標類似,利用迭代器對容器中的元素序列的操作。格式舉例list itrerator it 迭代器本身是乙個物件,這個物件可以遍歷stl容器內部全部的物件,它能夠反覆地對stl容器內容進行訪問。迭代器所提供的基本操作如下所示 a.獲取當前被指向的元素,用...
容器vector和迭代器iterator 使用
容器vector宣告方式 vector 型別 變數名 引數 使用前需要引用 incude 初始化方式有下面幾種 1 宣告初始化例如 vectorvct 預設建構函式為空 vectorvct1 vct 用已宣告好容器來初始化 vectorvct2 3,5 大小為3的容器初始化三個都等於5 vector...