我们知道重新分配机制负责在调用std::vector::push_back()
时分配更多我们实际需要的内存。
通常容量随着乘数2x或黄金比率数值增加~1.618 ...
假设我们添加如下元素:
std::vector<int> v;
for(unsigned i = 0; i < 100000; ++i)
{
v.resize(v.size() + 1);
}
是否保证向量的容量是&#34;加倍&#34;如果重新分配?
换句话说:&#34; +1会调整大小&#34;以与push_back
完成相同的方式分配内存。
或者它是一个纯粹依赖于实现的东西?
答案 0 :(得分:1)
是否保证向量的容量是&#34;加倍&#34;如果重新分配?
没有。内存重新分配的复杂性是摊销不变的。对象的容量在需要时是加倍还是由另一个因子增加是依赖于实现的。
&#34; +1会调整大小&#34;以与push_back相同的方式分配内存
是
当std::vector::resize(size_type sz)
大于sz - size()
时, sz
会将size()
值初始化的元素附加到序列中。这相当于:
insert(end(), sz-size(), <value initialized object>);
std::vector::insert
,std::vector::emplace
和std::vector::push_back
具有相同的内存分配复杂度 - 摊销常量。
答案 1 :(得分:0)
vector是一个支持(摊销)常量的序列容器 时间插入和擦除操作结束; [vector.overview]
和
如果size()&lt; sz,将sz - size()默认插入元素附加到 序列
用于调整大小。恕我直言,这意味着,是的,如果重新分配发生,保证向量的容量“加倍”