vector是乙個向量容器,在c++開發中經常會使用到,vector本身自帶的刪除函式有:
如果要刪除vector中指定的元素,則可以使用 erase函式,該函式可以刪除乙個迭代器指向的元素或者乙個迭代器區間的元素,但是該函式執行過程中每被刪除乙個元素,則指定迭代器就會失效,並且該迭代器之後的元素都要進行移位,如果頻繁使用該函式效率會很低。
c++ 中提供了乙個remove方法,但是採用remove一般情況下不會改變容器的大小,刪除指定元素,後面的元素會向前移動,然後用"未刪除"物件來填補被刪除物件留下的缺口。所以remove過程中迭代器不會失效,但是整個vector中肯定沒有被刪除的元素資料了。remove之後再結合erase函式才能達到真正刪除的目的。
demo測試:
測試環境:
ubuntu 16.04.4 lts
gcc version 4.8.5
測試**:
#include
#include
#include
void showdata(vector& vec)
cout << endl;
}int main()
{vectorvec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(3);
vec.push_back(5);
showdata(vec);
vector::iterator ret = remove(vec.begin(), vec.end(), 3);
cout<<"ret = "<<*ret<輸出:
vec siez:6
1 2 3 4 3 5
ret = 3
vec siez:6
1 2 4 5 3 5
vec siez:4
1 2 4 5
總結:
1、當需要刪除的元素在vector中有重複的情況,使用remove和erase一起使用比較簡單高效。
2、當要刪除vector中不同元素的時候,通常是在for迴圈中找到需要刪除的元素,然後再一一刪除,但是這個過程一不小心還會出錯。所以也可以用remove和erase結合解決。
問題:
其實這裡有乙個疑問,就是使用remove方法也有移位操作,但是跟erase相比,到底哪個效率高?
Vector容器刪除元素
使用vector容器也有一段時間了,但是對於他的刪除操作還是有點疑問,今天就總結一下。vector資料儲存是一段預先分配好大小的記憶體連續的空間,插入資料和刪除資料都會引起後面資料記憶體的整體移動。今天就說說刪除操作吧 1 刪除最後的元素 直接使用pop back 就可以了,這個沒什麼好說的 2 刪...
vector向量容器的刪除
erase 方法可以刪除vector中迭代器所指的乙個元素或一段區間中所有元素。clear 方法則一次性刪除vector中所有的元素。include includeusing namespace std int main int argc,char argv v.erase v.begin 2 刪除...
提高Vector容器的刪除效率
vector容器是類似與乙個線性陣列,索引效率高,插入,刪除的效率很低,需要遍歷資料列表,一般情況下vector的刪除操作由一下函式完成 iterator erase iterator position 刪除乙個位置iterator erase iterator first,iterator las...