本篇文章是作者看博客自己理解的,可能有错,还请各路大神指点。
长话短说,众所周知,clear()用于清除vector内容,而swap()虽说是用于交换两个vector对象,但是也可以用于清除vector对象内容,本文不对swap()功能进行介绍,只说它清除vector内容的作用。
使用clear()清除所有元素,但是会发现元素数size()变为0,但是程序占用的capacity()没变。
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> vec;
for(int i = 0; i < 1000;i++){
vec.push_back(i);
}
cout<<"capacity: "<<vec.capacity()<< "size: "<<vec.size()<<endl;
vec.clear();
cout<<"capacity: "<<vec.capacity()<< "size: "<<vec.size()<<endl;
return 0;
}
打印结果:
vector的clear()方法做的事情就是将vector内的元素全部删除掉,并调用元素所存储的对象的析构函数释放对象,但这并不会改变vector本身所占用内存的大小。
通过swap()方法完全释放vector占用的内存。将一个vector与一个空的vector临时对象进行swap,会使的源vector的size,capacity都变为0:
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> vec;
for(int i = 0; i < 1000;i++){
vec.push_back(i);
}
cout<<"capacity: "<<vec.capacity()<< "size: "<<vec.size()<<endl;
vector<int>().swap(vec);
cout<<"capacity: "<<vec.capacity()<< "size: "<<vec.size()<<endl;
return 0;
}
打印结果:
可以看到size和capacity都变为了0;而临时对象的作用域就是这句语句,随着生命周期结束,该对象在析构时会释放内存,这样就达到了释放vec占用内存空间的目的。