STL中vector的扩容和回收

一、求容器大小的函数:

size():返回当前vector元素的个数。

capacity():返回当前vector中最大能够存储的元素的个数。

二、扩容的两种情况:

情况1:当元素添加时导致的扩容。

int main()
{
	vector vec;
	
	//扩容1:当元素添加时导致的扩容。VS2012采用的是1.5倍的扩容方式
	for(int i=0;i<30;i++)
	{
		vec.push_back(i);
		cout<<"size="<

运行结果:

STL中vector的扩容和回收_第1张图片

可以看出对于普通的添加元素,vector在VS2012采用的是1.5倍的扩容方式。其他编译器我还没有测试,先记着,等到测试了再补充。

情况2:使用reserve(int new_size)或者resize(int new_size,/*int init_value*/)函数导致的扩容。两者都是将容器扩大到恰好容纳指定的元素。

reserve(int new_size):

a.将容器扩大到能容纳new_size的大小。

b.扩大的只是容器的预留空间,空间内不正真创建元素对象。

c.改变capacity()的返回值,不改变size()的返回值。

int main()
{
	vector vec;
	
	for(int i=0;i<30;i++)
	{
		vec.push_back(i);
		cout<<"size="<

STL中vector的扩容和回收_第2张图片

 

resize(int new_size,/*int init_value*/):

 

a.第一个参数是指将要扩大到能容纳多少元素的大小;第二个参数是对扩大的空间进行初始化的值,如果不写,默认调用容器中存的元素的默认构造函数。

b.将容器扩大到能容纳new_size的大小。

c.改变容器的大小,并且创建对象。

d.改变capacity()的返回值,改变size()的返回值。

int main()
{
	vector vec;
	
	for(int i=0;i<30;i++)
	{
		vec.push_back(i);
		cout<<"size="<::iterator it=vec.begin();
	for(;it!=vec.end();++it)
	{
		cout<<*it<STL中vector的扩容和回收_第3张图片

三、容器的的回收

int main()
{
	vector vec;
	
	for(int i=0;i<30;i++)
	{
		vec.push_back(i);
		cout<<"size="<STL中vector的扩容和回收_第4张图片

总结:

使用clear()和erase()两个函数只是清空元素,但不回收内存。

先使用clear()再使用swap(),释放空间并且回收内存。

你可能感兴趣的:(C++)