謹慎使用STL中的erase操作!

2021-06-21 10:26:43 字數 377 閱讀 5357

最近被stl中的erase操作搞得暈頭轉向的

首先要知道一點:vector容器是連續儲存的,這一點跟陣列一樣。

假設我們乙個vector容器v,裡面有1,2,3,4,5,6六個元素,大家都知道此時v.end()指向6後面的下乙個位置,我用乙個迭代器ite指向4,然後我執行v.erase(v.begin()),那麼這個容器將會變成這樣:2,3,4,5,6,6,此時v.end()指向最後那個6!用v.size()得出容器大小為5,因為1已經被刪掉了,而最後那個6是不能算是容器的元素的!但你還是可以讀出它的值的,如你如果指向cout<

也就是說,如果我們要同時刪除兩個數,那麼先刪除前面的會對後面的刪除產生影響,所以我們可以選擇先刪後面再刪前面。

因此我們在使用erase一定要小心。

STL中的erase 方法

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

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...