一、基本概念
vector是STL中的一個容器,可實現動態數組的功能。它是一段連續的內存空間,可以存儲變量,變量的存儲大小是固定的,也就是所謂的容器大小。當需要往該容器中插入數據時,如果所需空間超出了容器當前的大小,會重新分配一塊更大的連續內存空間,然後將舊內存空間的內容複製到新內存空間中,並釋放舊內存空間。
vector的remove函數用於刪除vector中指定元素,它實際上並不會直接刪除該元素,而是將該元素和後面所有元素依次往前移動,並修改vector的大小。因此,該操作的時間複雜度為O(n)。
二、函數參數與返回值
vector的remove函數的參數為待刪除元素的迭代器,返回值為指向容器結尾的迭代器。
iterator remove(iterator position); iterator remove(iterator first, iterator last);
第一種情況,刪除迭代器position所指向的元素,返回值指向容器結尾的迭代器。第二種情況,刪除[first, last)範圍內的所有元素,返回值同樣指向容器結尾的迭代器。
三、使用示例
下面是一個使用remove函數刪除vector中特定元素的例子。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 刪除4 vector<int>::iterator it = find(v.begin(), v.end(), 4); v.erase(it); // 刪除5、6、7 it = find(v.begin(), v.end(), 5); v.erase(it, it+3); for(auto i = v.begin(); i != v.end(); i++) cout << *i << " "; cout << endl; return 0; }
在上面的代碼中,首先定義了一個含有10個元素的vector,然後通過find函數找到要刪除的元素的位置,再調用erase函數刪除該元素。與此同時,也演示了如何刪除一個範圍內的元素,即刪除[5, 7)之間的元素。
四、注意點
1. vector刪除元素後,迭代器會失效,因此要保證在erase操作之後,其後的迭代器都要重新獲得一下。
2. 如果只是想簡單地從vector中刪除元素,建議直接使用erase函數,因為remove函數需要使用迭代器,稍顯麻煩。
3. 刪除元素後建議使用shrink_to_fit函數縮小vector的容量,以節省內存。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/197181.html