vector容器resize和reserve方法的区别
STL容器中,vector的本质是一个可自动扩容的数组。
其原理是在已使用的容量到达总容量一定比例时,会触发扩容操作。扩容操作需要经历,申请内存,拷贝数据,释放内存的过程。
vector提供两个方法,resize和reverse方法。resize执行扩容操作并且自动执行构造函数。reverse仅仅修改容量大小,及vector的capacity的大小。vector的clear方法,仅仅修改有效数据数量,不回收内存。
工具/原料
Linux
C++
验证vector几种内置方法
以下三段代码,分别测试vector三个不同的内置方法。
首先创建一个空vector,
打印空vector的size以及capacity,
分别使用resize和reserve方法进行处理,
分别打印之后的size与capacity。
结果如下
结果分析
resize执行扩容操作并且自动执行构造函数。所以当我们使用resize扩容之后,再获取vector的size与capacity时,可以看到全部发生了变化,因为函数内部已经执行了对象的构造函数。
reverse仅仅修改容量大小,及vector的capacity的大小。并没有执行构造函数,所以实际size并没有发生变化。
vector的clear方法,就更直接了。仅仅修改有效数据数量,不回收内存。所以如果我们强行访问对应内存地址,理论上是可以拿到原来的数据的,当然,这些属于脏数据。
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:60
阅读量:92
阅读量:24
阅读量:31
阅读量:52