“调整大小”会有降低矢量容量的风险吗?

时间:2018-03-10 23:03:03

标签: c++ memory vector memory-management std

在C ++中,方法resizestd::vector)改变了向量的大小(并在必要时构造/销毁对象),reserve允许最终增加容量一个向量。 shrink_to_fit会降低向量的容量以匹配其大小。当增加矢量大小时(通过resizepush_backinsert),如果需要,容量将会增加(如果我没有记错,每次需要增加时它会增加一倍)。

标准是否确保向量永远不会减少其容量,除非调用函数shrink_to_fit?或者,矢量容量是否可能根据编译器认为明智的做法而变化?

1 个答案:

答案 0 :(得分:4)

不,矢量的容量不会减少reserveresize

std::vector::reserve

  

如果new_cap [不大于capacity] ......没有迭代器或引用无效。

std::vector::resize

  

当调整为较小的大小时,向量容量永远不会减少,因为这会使所有迭代器无效,而不是仅通过等效的pop_back()调用序列无效的那些迭代器。

Relevant part of the standard