Vector 容器快速刪除方法

2021-08-25 14:21:55 字數 1317 閱讀 7886

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