谈到vector的内存分配,首先要知道size()和capacity()方法的区别。
前者求的是实际的vector元素个数,后者求的是实际占用内存的个数,一般来说,申请的内存capacity()是大于或等于size()的
1.clear()1.清空vector的元素:clear()
2.释放内存:clear() + shrink_to_fit() 或 swap()
1.使用clear()不会真正释放内存,capacity()无变化
#include
#include
using namespace std;
int main(){
vector vec;
//手动空间100
vec.reserve(100);
vec.push_back(1);
vec.push_back(2);
cout <<"vec.size(): " << vec.size() << endl;
cout <<"vec.capasity(): " << vec.capacity() << endl;
vec.clear();
cout <<"After vec.size(): " << vec.size() << endl;
cout <<" After vec.capasity(): " << vec.capacity() << endl;
return 0;
}
运行结果如图:
2.clear()+ shrink_to_fit();想要彻底释放内存,C11引入了shrink_to_fit();,clear()后执行可完全释放内存
#include
#include
using namespace std;
int main(){
vector vec;
//手动空间100
vec.reserve(100);
vec.push_back(1);
vec.push_back(2);
cout <<"vec.size(): " << vec.size() << endl;
cout <<"vec.capasity(): " << vec.capacity() << endl;
vec.clear();
vec.shrink_to_fit();
cout <<"After vec.size(): " << vec.size() << endl;
cout <<"After vec.capasity(): " << vec.capacity() << endl;
return 0;
}
运行结果:
3. swap();1.swap的适用与一下两种情况的内存空间:1.释放vector中多余的空间,2.释放整个vector空间
构造函数也不同:
释放整个vecter空间:vector
释放vec中多余空间:vector
2.swap交换技巧释放内存空间的思想:vector()使用默认构造函数建立临时vector对象,再对该临时对象上调用swap()成员,swap调用之后对象vector占用的空间就等于一个默认构造的对象的大小,临时对象就具有原来对象vector的大小,而临时对象随机被析构,从而其占用的空间被释放调。
例如vector释放全部专用内存
#include
#include
using namespace std;
int main(){
vector vec;
//手动空间100
vec.reserve(100);
vec.push_back(1);
vec.push_back(2);
cout <<"vec.size(): " << vec.size() << endl;
cout <<"vec.capasity(): " << vec.capacity() << endl;
vector ().swap(vec);
cout <<"After vec.size(): " << vec.size() << endl;
cout <<"After vec.capasity(): " << vec.capacity() << endl;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)