c++中vector容器释放内存个方法的区别(clear

c++中vector容器释放内存个方法的区别(clear,第1张

谈到vector的内存分配,首先要知道size()和capacity()方法的区别。

前者求的是实际的vector元素个数,后者求的是实际占用内存的个数,一般来说,申请的内存capacity()是大于或等于size()的

1.清空vector的元素:clear()

2.释放内存:clear() + shrink_to_fit() 或 swap()

1.clear()

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 ().swap(vec);

释放vec中多余空间:vector (vec).swap(vec);

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;
}  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/662347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-18
下一篇 2022-04-18

发表评论

登录后才能评论

评论列表(0条)

保存