您的位置首页百科知识

vector容器resize和reserve方法的区别

vector容器resize和reserve方法的区别

STL容器中,vector的本质是一个可自动扩容的数组。

其原理是在已使用的容量到达总容量一定比例时,会触发扩容操作。扩容操作需要经历,申请内存,拷贝数据,释放内存的过程。

vector提供两个方法,resize和reverse方法。resize执行扩容操作并且自动执行构造函数。reverse仅仅修改容量大小,及vector的capacity的大小。vector的clear方法,仅仅修改有效数据数量,不回收内存。

以下三段代码,分别测试vector三个不同的内置方法。

首先创建一个空vector,

打印空vector的size以及capacity,

分别使用resize和reserve方法进行处理,

分别打印之后的size与capacity。

结果如下

resize执行扩容操作并且自动执行构造函数。所以当我们使用resize扩容之后,再获取vector的size与capacity时,可以看到全部发生了变化,因为函数内部已经执行了对象的构造函数。

reverse仅仅修改容量大小,及vector的capacity的大小。并没有执行构造函数,所以实际size并没有发生变化。

vector的clear方法,就更直接了。仅仅修改有效数据数量,不回收内存。所以如果我们强行访问对应内存地址,理论上是可以拿到原来的数据的,当然,这些属于脏数据。