一、基本概念
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-hk/n/197181.html
微信掃一掃
支付寶掃一掃