提高Vector容器的刪除效率

2022-03-06 02:46:15 字數 1161 閱讀 9813

vector容器是類似與乙個線性陣列,索引效率高,插入,刪除的效率很低,需要遍歷資料列表,一般情況下vector的刪除操作由一下函式完成:

iterator erase(iterator position)                     //刪除乙個位置
iterator erase(iterator first, iterator last)          //刪除迭代器起始位置到最終位置
void resize(size_type new_size, const t& x)  // 修改容器大小

看看stl的原始碼檔案中這幾個函式中的操作:

// 將迭代器 position 所指之元素移除

iterator erase(iterator position)

iterator erase(iterator first, iterator last)

void resize(size_type new_size, const t& x)

void resize(size_type new_size)

// 清除全部元素。注意,並未釋放空間,以備可能未來還會新加入元素。

void clear()

很明顯:已知需要刪除的位置的時候,erase()函式刪除當期位置,然後將後面的資料前移,這也是為什麼vector插入刪除操作速度慢的原因。

resize()函式根據引數重新容器的大小,如果設定的尺寸小於原先的則將多餘的資料直接erase。

今天意外中開發一種比較巧的避免刪除時候位移的方法:把需要刪除的元素和最後乙個元素交換位置,然後通過resize() 來刪除資料,不過這種辦法沒法保證列表中資料的順序。

1迴圈刪除操作
vector::iterator it = ilist.begin();
while(it != ilist.end())
2提高刪除的效率
it = ilist.begin();
while(!ilist.empty())

細雨淅淅 標籤: c++

vector向量容器的刪除

erase 方法可以刪除vector中迭代器所指的乙個元素或一段區間中所有元素。clear 方法則一次性刪除vector中所有的元素。include includeusing namespace std int main int argc,char argv v.erase v.begin 2 刪除...

Vector容器刪除元素

使用vector容器也有一段時間了,但是對於他的刪除操作還是有點疑問,今天就總結一下。vector資料儲存是一段預先分配好大小的記憶體連續的空間,插入資料和刪除資料都會引起後面資料記憶體的整體移動。今天就說說刪除操作吧 1 刪除最後的元素 直接使用pop back 就可以了,這個沒什麼好說的 2 刪...

Vector 容器快速刪除方法

vector是乙個向量容器,在c 開發中經常會使用到,vector本身自帶的刪除函式有 如果要刪除vector中指定的元素,則可以使用 erase函式,該函式可以刪除乙個迭代器指向的元素或者乙個迭代器區間的元素,但是該函式執行過程中每被刪除乙個元素,則指定迭代器就會失效,並且該迭代器之後的元素都要進...