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 後,當前元素的迭代器失效,但是其結構是紅黑樹...