STL中容器vector迭代器失效的相關問題

2021-09-20 06:16:26 字數 1245 閱讀 9444

無法通過迭代器++,–操作遍歷整個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...