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 向量初始化时间的主要内容,如果未能解决你的问题,请参考以下文章
如何初始化包含 opencv:matrices 的二维向量?
opencv4opencv教程 C++ 4Mat对象(深拷贝:clone()copyTo(),create()创建图片,zeros()eye()初始化空白图像,Scalar()创建向量)