C++ : 使用 std::vector::reserve 减少保留空间

C++ : Reduce reserved space with std::vector::reserve

本文关键字:保留 空间 vector 使用 std C++ reserve      更新时间:2023-10-16

可能的重复项:
如何缩小标准::矢量?

根据 cpp 首选项,在 std::vector::reserve(size_t n) 中,n 是"所需作为分配存储容量的最小数量"。我的问题是:如何避免只知道最大值的任何重新分配?

举个例子,假设我有一个整数列表,但我不知道这个列表的大小(例如,这个列表来自文件的读取)。但我知道这个列表的最大大小是 1000。假设列表的实际大小是 800。

目前,我使用 std::reserve(1000),然后是 push_back() 循环。使用储备 I 防止任何重新分配。但是如何在push_backs结束时释放多余的空间?(在示例中,如何释放 1000-800=200 的额外空间?

谢谢。

您可以使用

std::vector::shrink_to_fit()

std::vector<int> v;
v.reserve(1000);
for(int i=0;i<800;++i)
    v.push_back(10);
v.shrink_to_fit();

您基本上需要创建一个正确大小的新向量并交换两个向量的内容。幸运的是,在STL中,这是一个单行代码 以下是示例:如何缩小std::vector?