STL中的erase 方法

2021-05-28 01:38:55 字數 976 閱讀 2227

stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器(如:vector 、deque);另一類是以不連續的節點形式儲存的容器(如:list、set、map)。在stl中用earse()方法刪除乙個元素很簡單,基本上也不會出什麼錯,但是在遍歷刪除某條件下的元素時就有可能會弄錯了。在list、set、map、vector和deque遍歷刪除某條件元素時通用的一種方法可以這樣使用:

std::list< int> list;   // 這裡也可以是set、map、vector和deque

std::list< int>::iterator iter = list.begin();

while( iter != list.end() )

else

iter ++;

}

通過erase方法的返回值來獲取下乙個元素的位置。

對於list、map等節點形式的容器有人會用另一種方式:

while( iter != list.end() )

else

iter ++;

}

而有些人往往會誤用為:

while( iter != list.end() )

else

iter ++;

}

在這裡「++」運算子是被過載過的,與我們平常的理解剛好相反,erase( iter++) 是先獲取下乙個元素的位置再刪除; erase( ++iter) 是刪除以後再獲取下乙個元素的位置。

為了不混淆「++」運算子,建議使用前面的通過erase方法的返回值來獲取下乙個元素的位置的方式來做遍歷刪除某些元素,這樣所有的stl容器還基本上可以共用,記起來也方便呢,呵...

STL中erase 的陷阱

最近在刷stl原始碼剖析這本書時,對於vector的erase 函式引起了我的注意 在刪除單個元素時是這樣定義的 iterator erase iterator position finish destroy finish return position erase 將position 1後面的元素...

STL中erase 用法陷阱

erase 函式的功能是用來刪除容器中的元素 刪除某個容器裡的某個元素 c.erase t 看似乙個簡單的動作,然而對不同型別的容器,內部卻做了截然不同的事情,後面介紹。假設有這樣乙個題目,將某個容器中所有滿足條件n x的元素刪除,按照常規的思路應該有類似這樣的 假設container和contai...

謹慎使用STL中的erase操作!

最近被stl中的erase操作搞得暈頭轉向的 首先要知道一點 vector容器是連續儲存的,這一點跟陣列一樣。假設我們乙個vector容器v,裡面有1,2,3,4,5,6六個元素,大家都知道此時v.end 指向6後面的下乙個位置,我用乙個迭代器ite指向4,然後我執行v.erase v.begin ...