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

标签 c++ memory-management stdvector

<分区>

Possible Duplicate:
How to downsize std::vector?

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

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

目前,我使用 std::reserve(1000),然后是一个 push_back() 循环。使用 reserve 我可以防止任何重新分配。但是如何释放 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();

关于C++:使用 std::vector::reserve 减少保留空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369163/

相关文章:

c++ - glVertexAttribPointer(偏移量?)给出 GL_INVALID_OPERATION

ios - 使用 UITextField 发布 UIViewController 时的内存问题

c++ - 在超出范围的结构对象上

c++ - vector 的 vector 到一维数组

c - 连接字符串后的 Malloc() 内存损坏错误

c++ - 如何将整数 vector 插入 std::map 的键、值

c++ - GCC __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535)

c++ - boost::python 字符串可转换属性

c++ - 头文件和库文件的连接

c - 如何在结构中正确使用指针数组