C 迭代器失效情況總結

2021-10-09 02:55:01 字數 630 閱讀 4330

迭代器失效分三種情況考慮,也是分三種資料結構考慮,分別為陣列型,鏈表型,樹型資料結構。

陣列型資料結構:該資料結構的元素是分配在連續的記憶體中,insert和erase操作,都會使得刪除點和插入點之後的元素挪位置,所以,插入點和刪除掉之後的迭代器全部失效,也就是說insert(*iter)(或erase(*iter)),然後在iter++,是沒有意義的。解決方法:erase(*iter)的返回值是下乙個有效迭代器的值。 iter =cont.erase(iter);

鏈表型資料結構:對於list型的資料結構,使用了不連續分配的記憶體,刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器.解決辦法兩種,erase(*iter)會返回下乙個有效迭代器的值,或者erase(iter++).

樹形資料結構:使用紅黑樹來儲存資料,插入不會使得任何迭代器失效;刪除運算使指向刪除位置的迭代器失效,但是不會失效其他迭代器.erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器。

注意:經過erase(iter)之後的迭代器完全失效,該迭代器iter不能參與任何運算,包括iter++,*ite

STL迭代器失效情況總結

define crt secure no warnings include include include include include include using namespace std void stl vector test cout it cout endl cout 插在迭代器指向的...

C 迭代器失效的幾種情況總結

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

STL迭代器失效情況

vector與string有以下兩種情況會使得迭代器失效 1.若新增元素時,儲存空間足夠,沒有重新分配,則end返回的迭代器失效 若儲存空間不足,重新分配空間,則全部迭代器失效。2.刪除元素時,刪除點之前的迭代器有效,之後的迭代器失效。原因 vector與string是順序儲存 占用的是一塊連續記憶...