大家好,今天小编关注到一个比较有意思的话题,就是关于pushback的问题,于是小编就整理了2个相关介绍pushback的解答,让我们一起看看吧。
pushback是什么意思?
1.vector中push_back函数的意思是在vector的末尾插入一个元素。2.vector简单理解为动态一维数组push_back作用是在这个一维数组尾部插入一个元素 vector
C++vector的push_back扩容机制为什么不考虑在尾元素后面的空间申请内存?
首先我们看一下官方文档对vector的说明:
再看一下对push_back函数的说明:
总结起来就是初始时刻vector的capacity为0,塞入第一个元素后capacity增加为1,vector内部是通过数组来实现的,它占用的是一块连续空间,当空间不足时它会重新申请空间,并将当前内容一并拷贝到新的空间,下图是vector内存的扩充的示意图。
有一点需要说明,容量扩充并不总是扩充至两倍,具体的倍数取决于编译器,比如在GCC下是两倍,而在VS2017中是1.5倍,下图是在VS中的实验结果。
可见每push_back一个元素,vector的size就增加1,而capacity则以1.5倍的速度增加,3增加到4而不是4.5,是因为取整的原因。
那么为什么要这样处理,主要有两个原因:
1、vector在push_back以成倍增长可以在均摊后达到O(1)的***复杂度。具体的推理过程涉及到算法分析与一些数学知识,在此不再傲述,感兴趣的话,可留言。
vector是整块内存占用,内存地址是连续的,一般情况下已经没有剩余的内存在原来的内存后面,这个时候就需要另外新建一个更大的连续内存空间,然后把数据拷贝过去,最后释放原来的内存。 所以vector最好是对于内存有个预先的评估和计算, 频繁的整块切换内存地址,这个开销也是蛮大的。
分两种情况,容器队尾若有剩余未使用空间,可以直接插入,否则会重新申请一片更大的区域,并将原区域数据拷贝到新区域,并指向新区域的地址。到这种操作是自动完成的,用户并不感知。
到此,以上就是小编对于pushback的问题就介绍到这了,希望介绍关于pushback的2点解答对大家有用。