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)
如果元素按递增的索引顺序排列,每次调用调整大小时向量容量是否会增加一(在典型的实现中)?我希望不会...
该标准不保证重复调用的渐进性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)