vector的一些案例,帮助理解vector用法

时间:2023-01-29 17:44:54

本人正在学习vector容器,喜欢写一些案例来帮助自己理解,分享上来希望对初学者有点帮助。

1.关于vector容量的问题。

vector在初始化的时候默认size=0,capacity=0;

但是随着元素的增加,容量会不够用,这时vector会自动扩容,扩大倍数不确定,不过好像为1~2倍之间,下面有例子为证。

vector的一些案例,帮助理解vector用法

vector的一些案例,帮助理解vector用法

运行结果:

vector的一些案例,帮助理解vector用法

从例子可以看出,capacity依次为0,1,2,3,4,6,9,扩大的倍数不是固定的。

2.容量不够的时候,vector会自动扩充,那扩充的过程是怎么样的呢,请看下面例子:

vector的一些案例,帮助理解vector用法

vector的一些案例,帮助理解vector用法

运行结果:

vector的一些案例,帮助理解vector用法

可以看出,Ivec.push_back()之后,调用了a的拷贝构造函数,Ivec.push_back()之后,发现容量不够,于是vector找到一块容量更大的内存,将a拷贝至新内存,然后将原来内存中的a析构,再把b拷贝至新内存。这样就完成了内存的重新分配。

3.三种清空内存的方法:

沿用1案例中的代码,分别用下面三种方式处理

vector的一些案例,帮助理解vector用法

运行结果:

vector的一些案例,帮助理解vector用法

vector的一些案例,帮助理解vector用法

vector的一些案例,帮助理解vector用法

可以看出,clear()函数只是将容器中元素删除,容器的容量没有改变,而后两种方法都将容量变为0了。

4.使用shrink_to_fit函数删除多余内存

vector的一些案例,帮助理解vector用法

运行结果:

vector的一些案例,帮助理解vector用法

可以看出,调用函数shrink_to_fit后,容器的capacity减小至size的大小,即删除了多余的容量。