Chinaunix

标题: vector的reserve [打印本页]

作者: ruifengzhangyi    时间: 2015-12-21 01:16
标题: vector的reserve
感觉resize完全可以替换掉reserve,什么时候会只用到reserve?

比如reserve一个100的vector
和resize一个100 的vector

前者需要push_back 后者直接[] 赋值 有什么区别吗?两者占的空间不一样吗?
作者: hellioncu    时间: 2015-12-21 07:58
resize改变了size
作者: fender0107401    时间: 2015-12-21 08:17
不要总是怀疑那些容器开发者的设计能力,当时定义接口的时候,肯定是动了很多脑筋的。
作者: folklore    时间: 2015-12-21 08:38
回复 1# ruifengzhangyi


    reserve更自然, 如果是·push一个Class的话。·reserver因为不会调用Constructor/Deconstructor,效能更高。

还有就是,Resize要精确知道Size并一次性初始化才行, Reserver没这个限制。

话说, 楼主想用其中一个函数替代两个完全不同的函数是什么道理?
作者: ruifengzhangyi    时间: 2015-12-21 13:45
本帖最后由 ruifengzhangyi 于 2015-12-21 14:00 编辑

回复 4# folklore
抛开性能不说,一个函数能做的事情,另一个函数也能做。
---------
reserve函数主要是为提升vector的效率而存在的,如果已知vector的大小,可以在初始化时为vector执行reserve操作,分配足够的内存空间,之后数据加入vector就不会造成内存再次分配,也可以减少内存碎片。另外reserve操作只分配内存空间,并不执行元素初始化,因此效率上要比resize要高,假如vector中存储的是复杂的对象,执行这些元素的初始化将是一笔不小的开销。
   
作者: windoze    时间: 2015-12-22 21:48
resize增加了新元素,reserve只是增加了空间。
换句话说,resize增加的元素是经过构造函数初始化的,reserve增加的空间没有初始化。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2