std vector刪除元素迭代器以及記憶體的變化

2021-08-22 13:10:58 字數 605 閱讀 4811

std::vector是順序容器,當用erase成員函式刪除乙個迭代器指向的元素時,會自動移動(不是std::move)後面的元素到前面來,而迭代器的指向不變(如果是std::map、std::list這類關聯型容器,迭代器會失效),並且不會**記憶體(也就是capacity不會變)。當用swap成員函式跟自身的拷貝交換時,才能釋放多餘記憶體。

**如下,自定義乙個foo類以監視構造、賦值、複製、移動、析構等情況。

#include #include class foo;

std::cout<

std::cout<

/*2*/ iter!=vec.end();/*iter++*/)

else/* printf("%d\n",*iter);*/std::cout<

}std::cout<

std::cout<

return 0;

}

運**況如下(在vs 2010 和 vs 2017上跑會出錯,在linux下沒問題。不知道為什麼這篇文章不能繼續加字了。。。

std vector刪除重複元素和查詢

原文 需要這樣乙個容器,可以自動地刪除重複元素,並能很方便地進行查詢操作!似乎採用樹型結構儲存的std set是最佳之選,但到後面才發現,存進去容易,取出來麻煩。不得已又回去用std vector,就在網上找了找,vector是如何實現類似set的unique和find的。其實也沒有想象的複雜,也不...

std vector插入和刪除高階

std vectorexamplevec 1.iterator erase const iterator pos 移除位於 pos的元素 注意點 1 迭代器 pos必須合法且可解引用。所以 不能以end 迭代器為 pos的值 合法,但不可解引用 不然會拋異常。比如 examplevec.erase ...

c STL中迭代器刪除元素

對於序列容器vector,deque來說,使用erase itertor 後,後邊的每個元素的迭代器都會失效,但是後邊每個元素都會往前移動乙個位置,當前的迭代器指標直接指向了下乙個元素 對於關聯容器map set 來說,使用了erase iterator 後,當前元素的迭代器失效,但是其結構是紅黑樹...