繁体   English   中英

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

[英]initializing a vector of vectors using the fill constructor

以这种方式初始化向量向量是否会复制向量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;

这会进行一次分配,并且可以保证所有元素都位于 memory 的同一块中。 2d 向量不能为您提供保证。

为了让生活更轻松,您可以将其封装到 class 中,这样您就可以重载[]运算符以使其像二维结构一样工作。 这是通过为 class 重载operator[]并让它返回包含对向量行的引用的代理类型来完成的,然后为代理类型重载operator[]以返回对引用的 col 的引用向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM