vector底层基于数组,可称之为动态数组。当需要的时候vector内部会动态开辟内存,然后内部进行数组的拷贝,所以多次拷贝也容易造成内存碎片,即使你把其中的元素清空了,但是他申请到的空间却不会自动释放。以下提供几种常见vector清除元素的方法,以及如何清除元素的同时释放空间。
1. clear(),清空元素,但不回收空间
vec.clear();
2. 使用 erase循环删除,结果同上
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); )
{
//注意使用erase()方法时,迭代不要随意的++
it = vec.erase(it);
}
结论:erase在每次操作时,迭代器指针会整体前移1,就是每次都会移动全部数据,所以vector不适合做频繁删除的容器
3. 最简单的使用swap,清除元素并回收内存
3.1 写法一
vector<int>().swap(vec);
3.2 写法二
vec.swap(vector<int>());