C++ : 使用 std::vector::reserve 减少保留空间
C++ : Reduce reserved space with std::vector::reserve
可能的重复项:
如何缩小标准::矢量?
根据 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?
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 写入 std::vector 的保留空间会导致分段错误吗?
- 自定义容器在保留空间时不必要地创建新元素实例
- 为变量和激活记录保留空间
- 如何在堆栈上为非默认构造对象保留空间
- 从矢量中删除一对并为矢量对保留空间
- std::basic_string构造函数如何事先知道要保留多少空间
- 如何在不初始化每个元素的情况下为数组保留空间
- 如何在 Cython 包装器中保留复杂的 C++ 命名空间
- C++ : 使用 std::vector::reserve 减少保留空间
- 全局命名空间中的保留名称
- 在硬盘上为应用程序保留空间
- 为什么"std::string::reserve()"不保留我指定的确切空间量?
- 动态数组的Do实现在开始时保留空间,以备准备
- 为什么堆栈帧上保留的空间比x86中需要的空间多
- 为结构体保留内存空间时
- 如何为std::vector/std::string保留空间?
- 如果向量有足够的空间(通过保留创建),std::vector::insert()是否会使迭代器无效