【问题标题】:C++ 2D vector initialization timeC++ 2D 向量初始化时间
【发布时间】:2021-09-19 17:56:49
【问题描述】:

为什么二维向量初始化比一维要长 20 倍?

这需要 32 毫秒:

vector<vector<float>>a(1000000,vector<float>(1));

但是这个需要 1.3 毫秒:

vector<float> b(1000000);

如果没有优化,情况会更糟。

【问题讨论】:

  • 第一个至少分配了 1m 堆。第二个只做一个。
  • 你说的是创建 1000000 个向量而不是 1000000 个浮点数
  • 构建向量与构建浮点数不同。

标签: c++ vector


【解决方案1】:

如果您查看向量实现,您会注意到一个 new 运算符用于为每个元素分配内存。对二维数组(向量)使用动态分配,您需要为每一行分配内存(调用 new 运算符 n 次,其中 n 是向量第一维的数量)。运算符 new 不是很快,因为它调用 malloc 函数在堆上分配内存。二维向量的构造函数是这样实现的:

 vector = new T*[n];
  for(size_t i = 0; i < n; ++i){
    vec[i] = new T[m];
  }

其中 T 是泛型类型,n 是第一个维度,m 是第二个维度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2012-06-21
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多