首页 > 解决方案 > 无法理解 vector.resize() 和 vector.shrink_to_fit() 的工作

问题描述

我遇到了 2 个描述使用的代码,std::vector::resize()并且std::vector::shrink_to_fit()无法理解哪一个会破坏向量的元素。

示例 1

示例 2

在示例 1 中,即使在resize(5)使用之后,向量也具有所有元素,而在示例 2resize(4)中,则消除了向量的第 5 个元素。看看并告诉我是否有问题。

标签: c++c++11vector

解决方案


第一个示例是未定义的行为,因为向量在被调用后只有 5 个元素,resize(5)并且可以访问索引为 9 的元素。但是,它可能在发布版本中工作,因为尚未释放其余元素的内存。调试版本可能会捕获错误。

shrink_to_fit() 不会改变向量的内容。但是,它可能会将元素移动到较小的内存块并释放旧内存,从而导致显示先前的错误。

第二个示例正确使用了向量。


推荐阅读