dte*_*ech 13 c++ vector push-back
我的问题是关于它的效果vector::push_back
,我知道它在向量的末尾添加了一个元素但是在引擎盖下面会发生什么?
IIRC内存对象是按顺序方式分配的,所以我的问题是是否vector::push_back
只是在向量之后立即分配更多内存,如果是这样,如果该位置没有足够的可用内存会发生什么?或者也许在"结束"中添加指针以使向量"跳"到它继续的位置?或者只是通过将其复制到另一个有足够空间且旧副本被丢弃的位置来重新分配?或者别的什么?
Dav*_*eas 20
如果已经分配了足够的空间,则该对象是根据参数进行复制构造的.当没有足够的内存,所述载体将增长它的内部的DataBuffer以下某种几何级数(每次新的大小将是k*old_size
与k > 1
[1] )和存在于原始缓冲器中的所有对象将被移动到新的缓冲器.操作完成后,旧缓冲区将被释放到系统.
在上一句中,移动不用于技术移动构造函数/移动分配意义上,它们可以被移动或复制或任何等效操作.
[1]通过因子增长k > 1
可确保摊销成本push_back
不变.实际常量因实现而异(Dinkumware使用1.5,gcc使用2).摊销成本意味着即使每隔一段时间push_back
花费很高(O(N)
根据当时矢量的大小),这些情况也很少发生,因此整个插入过程中所有操作的成本都是线性的.插入,因此每次插入平均成本不变)
归档时间: |
|
查看次数: |
10599 次 |
最近记录: |