一、基本概念
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的容量,以节省内存。