關於迭代器失效

2021-05-26 17:58:39 字數 541 閱讀 5458

•迭代器失效:注意關聯容器和序列容器的區別

–序列容器

vector

list

deque

–關聯容器

map   

set•序列性容器

–erase迭代器不僅使所有指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值為下乙個有效的迭代器,所以正確使用方法為:

for( iter = c.begin(); iter != c.end(); )

iter = c.erase(iter);

•關聯性容器

–erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器,如:

for( iter = c.begin(); iter != c.end(); )

c.erase(iter++);

•tips:

其實對於list兩種方式都可以正常工作。

come from  konten ppt  

迭代器失效 典型的迭代器失效

首先對於vector而言,新增和刪除操作可能使容器的部分或者全部迭代器失效。那為什麼迭代器會失效呢?vector元素在記憶體中是順序儲存,試想 如果當前容器中已經存在了10個元素,現在又要新增乙個元素到容器中,但是記憶體中緊跟在這10個元素後面沒有乙個空閒空間,而vector的元素必須順序儲存一邊索...

迭代器失效

迭代器 iterator 是乙個可以對其執行類似指標的操作 如 解除引用 operator 和遞增 operator 的物件,我們可以將它理解成為乙個指標。但它又不是我們所謂普通的指標,我們可以稱之為廣義指標,你可以通過sizeof vector iterator 來檢視,所佔記憶體並不是4個位元組...

迭代器失效

對於序列式容器 如vector,deque 刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vetor,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。所以不能使用erase iter 的方式,還好erase方法可以返回下乙個有效的it...