【发布时间】:2011-12-22 12:46:11
【问题描述】:
据我所知,当 vector::resize 需要增加时,C++ 标准并没有具体说明如何增加矢量容量。但是有“典型”的实现吗?
具体来说:我不知道我的向量需要多大。此外,元素以随机顺序出现。所以对于每个元素我都有这个:
if ( index >= vector.size() ) {
vector.resize ( index + 1 );
}
vector.at ( index ) = element;
如果元素以递增的索引顺序出现,每次调用 resize 时向量容量是否会增加 1(在典型实现中)?我希望不会……
【问题讨论】:
-
@TomalakGeret'kal:这是一个不同的问题。重复的
resize()s 没有保证的渐近线。 -
@KerrekSB:这完全是同一个问题。 “我的容器在实施中的容量会增加多少?”
-
@TomalakGeret'kal:不完全是:这个问题涉及
push_back,并且push_back具有强制性的复杂性保证(即摊销常数)——这反过来又迫使实现以几何方式增长存储。没有类似的要求会影响resize()的情况。 -
@TomalakGeret'kal:我不确定 - 问题要求“实际乘数”,但我的意思是
resize()和任何“乘数”之间没有联系,因为没有要求resize()引起的分配遵循任何特定的方案。那是不同的背景,不是吗?
标签: c++ resize stdvector capacity