C++ 2D 向量初始化时间

Posted

技术标签:

【中文标题】C++ 2D 向量初始化时间【英文标题】:C++ 2D vector initialization time 【发布时间】: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 个浮点数 构建向量与构建浮点数不同。 【参考方案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 是第二个维度。

【讨论】:

以上是关于C++ 2D 向量初始化时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中声明和初始化 2d int 向量?

如何初始化包含 opencv:matrices 的二维向量?

初始化向量 (C++)

opencv4opencv教程 C++ 4Mat对象(深拷贝:clone()copyTo(),create()创建图片,zeros()eye()初始化空白图像,Scalar()创建向量)

在定义的位置初始化向量向量 - C++

初始化 C++ 向量的大小