如何在施工时为std :: vector保留内存?

Ric*_*est 20 c++ stdvector

通常,我呼吁reservestd::vector构建后立即.这通常不会导致std::vector现有的堆分配被销毁并被替换为新的堆分配吗?有没有办法在构建时保留内存而不是分配堆空间然后立即销毁它?或者是否有一个实施技巧,std::vector以确保这不是一个问题?

可用的构造函数似乎只能用于填充std::vectorwith值,而不是显式保留空间.

Lig*_*ica 14

您的问题基于一个错误的前提,即默认构造std::vector<T>将执行[零长度]分配.

实际上没有理由这样做.一个新的向量应该具有容量(虽然这是理智所要求的,而不是标准所要求的).

因此,您的目标已经天生就满足了.

说实话,标准库并不是那么愚蠢.

  • +1.至于最后一句话:我甚至会说,标准库(特别是它的11 +相关部分)的设计和实现非常巧妙.我无法理解为什么这么多人会想,他们可以做得更好,并尝试从头开始编写所有内容...当我看到另一个时我生病了*"我正在编写一个游戏引擎,这是我的自定义矢量/ string/whatever.为什么它不起作用?"*... (2认同)
  • *“您的问题基于错误的前提,即默认构造的 std::vector&lt;T&gt; 将执行 [零长度] 分配。”*。你怎么知道这是一个错误的前提?该规范没有说明默认构造函数中的分配。所以**声称**无论哪种方式都是错误的。 (2认同)