vector::resize 增加了多少容量?

Joh*_* H. 5 c++ resize capacity stdvector

据我所知,C++ 标准没有具体说明当 vector::resize 需要增加时如何增加向量容量。但有没有一个“典型”的实现呢?

具体来说:我不知道我的向量需要有多大。此外,元素的顺序是随机的。所以对于每个元素我都有这个:

if ( index >= vector.size() ) {
    vector.resize ( index + 1 );
}
vector.at ( index ) = element;
Run Code Online (Sandbox Code Playgroud)

如果元素按递增的索引顺序排列,每次调用调整大小时向量容量是否会增加一(在典型的实现中)?我希望不会...

Ker*_* SB 4

该标准不保证重复调用的渐进性resize()。容器将容量简单地增加到精确所需的目标大小是完全可行的。事实上,这可能是大多数标准用例(例如仅使用一次)中理想的行为(即最少浪费) 。resize()

如果你担心,就实现你自己的几何增长:

if (index + 1 > v.size()
{
    if (v.capacity() < index + 1)
    {
        v.reserve(2 * (index + 1));   // I had 2 * capacity() here first, but
                                      // I think this version is better
    }
    v.resize(index + 1);
}
Run Code Online (Sandbox Code Playgroud)