当新大小小于当前大小时,std :: vector :: resize()是否会重新分配?

Ale*_*int 15 c++ std c++11 c++03 c++98

可能重复:
std :: vector向下调整大小

如果我resize()std::vector尺寸小于其当前尺寸,那么矢量是否可能会分配新内存?

出于性能原因,这对我很重要.

Cho*_*ett 12

不,resize更小的尺寸永远不会重新分配.

如果容器收缩,所有迭代器,指针和对尚未删除的元素的引用在调整大小后仍然有效,并引用它们在调用之前引用的相同元素.

(从这里)

鉴于此,我们可以确定重新分配不会发生.

  • 需要明确的是,这不是一个不会重新分配的正式保证.但是很难想象它怎么可能,因为它必须找到一些方法来保持迭代器的有效性,并且每种可以想象的方式都是可怕的.(并且可能只有在实现更好的情况下才能实现,在这种情况下,您应该感到高兴的是它可以使事情变得更好而不是重新分配.) (5认同)

Cas*_*Cow 6

resize()当reduce只改变逻辑大小时.其他人已经回答了这个,所以我在这里没有添加任何内容.这样做的目的是优化速度,因为它不需要重新分配或移动任何数据.

但是,当你想要优化内存使用时,C++ 11引入了一个shrink_to_fit()你可以在你resize()(甚至在任何其他时间)之后调用的另一个函数,这实际上可以确保你不需要支付你不想要的任何内存. .