`resize` 是不是有降低向量容量的风险?
Posted
技术标签:
【中文标题】`resize` 是不是有降低向量容量的风险?【英文标题】:Will `resize` have any risk to reduce the vector capacity?`resize` 是否有降低向量容量的风险? 【发布时间】:2018-03-10 23:03:03 【问题描述】:在 C++ 中,resize
(std::vector
)方法改变了向量的大小(必要时构造/销毁对象),reserve
允许最终增加向量的容量。 shrink_to_fit
将减少向量的容量以匹配其大小。增加向量大小时(通过resize
、push_back
或insert
),如果需要,容量会增加(如果我没记错的话,每次需要增加时都会增加一倍)。
标准是否确保向量永远不会减少其容量,除非函数shrink_to_fit
被调用?或者向量容量是否可能会根据编译器认为明智的做法而有所不同?
【问题讨论】:
我认为文档确实用Vector capacity is never reduced when resizing to smaller size
回答了这个问题。我只阅读了cplusplus docs,然后才询问哪些没有提及。谢谢
【参考方案1】:
不,向量的容量不会减少reserve
或resize
。
std::vector::reserve
:
如果
new_cap
[不大于capacity
] ...没有迭代器或引用无效。
std::vector::resize
当调整到更小的尺寸时,向量容量永远不会减少,因为这会使所有迭代器失效,而不仅仅是那些会被等效的 pop_back() 调用序列失效的迭代器。
Relevant part of the standard
【讨论】:
谢谢。我认为 cppreference.com 往往比 cplusplus.com 更好,应该总是看看他们的。我会在 6 分钟内准确地接受你的回答 :) @Remi.b 是的,cppreference 至少会稍微好一些。我实际上已将 cplusplus.com 列入黑名单,因此它不会出现在我的谷歌搜索中......以上是关于`resize` 是不是有降低向量容量的风险?的主要内容,如果未能解决你的问题,请参考以下文章