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

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

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

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

目前,我使用std :: reserve(1000),然后是一个push_back()循环。 使用保留我阻止任何重新分配。 但是如何在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?

链接地址: http://www.djcxy.com/p/91709.html

上一篇: C++ : Reduce reserved space with std::vector::reserve

下一篇: How many levels of pointers can we have?