1

可能重复:
如何缩小 std::vector 的大小?

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

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

目前,我使用 std::reserve(1000),然后使用 push_back() 循环。使用储备我防止任何重新分配。但是如何释放 push_backs 末尾的额外空间?(在示例的情况下,如何释放 1000-800=200 额外空间?)

非常感谢你。

4

2 回答 2

4

您可以使用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();
于 2012-04-29T02:28:53.980 回答
1

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

于 2012-04-29T02:20:45.370 回答