使用所述填充构造函数初始化向量中的向量



以这种方式初始化矢量是否会将矢量n复制一次?

const int n, m; 
vector<vector<int>> v(n, vector<int>(m));

初始化是否有效,或者我们可以让它变得更好?

以这种方式初始化矢量是否会复制矢量n次?

是。它将制作vector<int>(m)N副本,因此您将获得N + 1分配。

初始化是否有效,或者我们可以让它变得更好?

它很好,但决不是你能做的最好的。对于原始性能,你想做的是使用一个向量,并假装它是2d。看起来像

std::vector<int> v(rows * cols);
v[row_index * cols + col_index] = 5; // same as 2d v[row_index][col_index] = 5;

这只进行一次分配,就可以保证所有元素都在同一块内存中。二维矢量不能保证。

为了让生活更轻松,您可以将其封装到一个类中,这样您就可以重载[]运算符,使其表现得像一个2d结构。这是通过重载类的operator[]并让它返回对向量行的引用的代理类型来完成的,并且重载代理类型的operator[]以返回对引用向量中的col的引用。

最新更新