繁体   English   中英

在std :: vector :: resize和std :: vector :: push_back中摊销

[英]Amortizing in std::vector::resize and std::vector::push_back

我们知道重新分配机制负责在调用std::vector::push_back()时分配更多我们实际需要的内存。 通常容量随着乘数2x或黄金比率~1.618而增长......

假设,我们添加如下元素:

std::vector<int> v;
for(unsigned i = 0; i < 100000; ++i)
{
    v.resize(v.size() + 1);
}

如果进行重新分配,是否可以保证向量的容量“加倍”? 换句话说:“+1 resize”是否会以与push_back相同的方式分配内存。

或者它是一个纯粹的实现依赖的东西?

如果进行重新分配,是否可以保证向量的容量“加倍”?

不会。内存重新分配的复杂性是不变的。 对象的容量在需要时是加倍还是由另一个因子增加是依赖于实现的。

“+1 resize”是否会以与push_back相同的方式分配内存

是。

sz大于size()时, std::vector::resize(size_type sz)sz - size()值初始化元素附加到序列。 这相当于:

 insert(end(), sz-size(), <value initialized object>);

std::vector::insertstd::vector::emplacestd::vector::push_back具有相同的内存分配复杂度 - 摊销常量。

向量是一个序列容器,它在末尾支持(分期)恒定时间插入和擦除操作; [vector.overview]

如果size()<sz,则将sz-size()默认插入元素追加到序列中。

调整大小。 恕我直言,这意味着,是的,如果重新分配发生,保证向量的容量“加倍”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM