本人正在学习vector容器,喜欢写一些案例来帮助自己理解,分享上来希望对初学者有点帮助。
1.关于vector容量的问题。
vector在初始化的时候默认size=0,capacity=0;
但是随着元素的增加,容量会不够用,这时vector会自动扩容,扩大倍数不确定,不过好像为1~2倍之间,下面有例子为证。
运行结果:
从例子可以看出,capacity依次为0,1,2,3,4,6,9,扩大的倍数不是固定的。
2.容量不够的时候,vector会自动扩充,那扩充的过程是怎么样的呢,请看下面例子:
运行结果:
可以看出,Ivec.push_back()之后,调用了a的拷贝构造函数,Ivec.push_back()之后,发现容量不够,于是vector找到一块容量更大的内存,将a拷贝至新内存,然后将原来内存中的a析构,再把b拷贝至新内存。这样就完成了内存的重新分配。
3.三种清空内存的方法:
沿用1案例中的代码,分别用下面三种方式处理
运行结果:
可以看出,clear()函数只是将容器中元素删除,容器的容量没有改变,而后两种方法都将容量变为0了。
4.使用shrink_to_fit函数删除多余内存
运行结果:
可以看出,调用函数shrink_to_fit后,容器的capacity减小至size的大小,即删除了多余的容量。