STL 迭代器刪除,插入元素發生的事情

2021-08-04 13:30:00 字數 1434 閱讀 4220

一,序列式容器

1,刪除迭代器指向的元素

對於序列式容器(vector、deque、list),刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vector,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。使用erase方法後,返回的是下乙個有效的iterator。例如:

vectorval = ;  

vector::iterator iter;

for (iter = val.begin(); iter != val.end(); ) else

}

下面是stl中vector的erase方法的實現**
iterator erase(iterator position)
2,往迭代器指向的位置插入乙個元素

往某個位置插入乙個元素,則這個位置之後的元素都要後移,因此後面的迭代器都會失效;如果引起記憶體的重新配置,所有的迭代器都將失效。

vectorval = ;

vector::iterator iter = val.begin();

val.insert(iter, 0);

for (iter = val.begin(); iter != val.end(); iter ++)

}

二,關聯式容器

1,刪除迭代器指向的元素

對於關聯容器(map,set),刪除當前的iterator,僅僅會使當前的iterator失效,只要在erase時,遞增當前的iterator即可。這是因為map之類的容器,使用了紅黑樹來實現,刪除乙個結點不會對其他結點造成影響。

setvalset = ;

set::iterator iter;

for (iter = valset.begin(); iter != valset.end(); ) else

}

因為傳給erase的是iter的乙個副本,iter++是下乙個有效的迭代器。

2,往迭代器指向的位置插入乙個元素

往iterator指向的位置插入乙個元素,並不會對其他的節點造成影響,僅對插入的節點有影響,函式返回插入節點的迭代器

setvalset = ;

set::iterator iter = valset.begin();

valset.insert(iter, 0);

for (iter = valset.begin(); iter != valset.end(); iter ++)

STL刪除迭代器

1.關聯容器刪除乙個迭代器對其他迭代器不會造成影響,返回的是void型。2.序列容器刪除乙個迭代器後會造成後面的所有迭代器都往前移動乙個位置,因此先前儲存的迭代器都會失效,返回的是被刪除後新複製到被刪除位置的元素的迭代器。c 中利用迭代器刪除元素會發生什麼?1 對於關聯容器 如map,set,mul...

STL容器之刪除元素,迭代器失效

一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能真的刪除...

STL容器之刪除元素,迭代器失效

部落格 一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能...