You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构造带初始容量的std::vector<int>且不将元素初始化为0

实现vector仅预留空间不初始化元素的方法

你需要使用std::vector的reserve()成员方法,该方法只会预分配指定大小的底层内存空间,不会构造任何元素、不会修改vector的有效元素计数size,仅会修改内存容量capacity,既可以避免后续插入元素时的扩容开销,也不会生成无意义的初始化值占用有效元素位置。

修改后的代码示例:

#include <fmt/core.h>
#include <vector>

int main() {
    std::vector<int> a;
    // 预分配可容纳5个int的内存空间,不构造元素,size仍为0
    a.reserve(5);

    fmt::print("size: {}, capacity: {}\n", a.size(), a.capacity());
    a.push_back(2);
    fmt::print("size: {}, capacity: {}\n", a.size(), a.capacity());

    // 连续插入4个元素,累计插入5个元素都不会触发扩容
    for (int i = 0; i < 4; ++i) {
        a.push_back(i);
    }
    fmt::print("after push 5 elements total, size: {}, capacity: {}\n", a.size(), a.capacity());

    return 0;
}

运行输出结果:

size: 0, capacity: 5
size: 1, capacity: 5
after push 5 elements total, size: 5, capacity: 5

易混淆接口的区别

  • std::vector<T>(n) / resize(n):调整vector的有效元素数量size为n,会为n个元素执行初始化操作,同时会将容量扩容到至少n,就是你问题中提到的会生成零值占用元素位置的用法。
  • reserve(n):仅调整vector的底层内存容量capacity为至少n,不会修改有效元素数量size,也不会执行任何元素初始化操作,仅用于提前预留内存避免后续插入的扩容开销。

内容的提问来源于stack exchange,提问作者Ilan Mittelman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:54:02