如果我想创建相同大小的矢量矢量,我该如何使用一条初始化线?
e.g。
std::vector<std::vector<int>> vv(5)
会默认初始化5个向量,但是如何将这5个向量初始化为一个大小?
答案 0 :(得分:5)
如下:
std::vector< std::vector<int> > vv(5, std::vector<int>(5, 0)); // Initialize with 0
答案 1 :(得分:0)
使用双参数构造函数:
std::vector<std::vector<int> > vv(5, std::vector<int>(5));
但效率不高。
答案 2 :(得分:0)
Lambdas允许在一行中进行非常复杂的初始化,如果一行确实是你想要的那样。
该语句创建一个包含5个向量的向量,每个向量包含0-4,5-9,10-14 ...
auto vv = [] {
int i = 0;
std::vector<std::vector<int>> result;
result.reserve(5);
std::generate_n(std::back_inserter(result),
5,
[&i]{
auto v = std::vector<int>();
v.reserve(5);
std::generate_n(std::back_inserter(v), 5, [&i]{ return i++; });
return v;
});
return result;
}();
如果你想在一行上,只需删除所有空格:
(不,我真的没有建议......)
auto vv = [] { int i = 0; std::vector<std::vector<int>> result; result.reserve(5); std::generate_n(std::back_inserter(result), 5, [&i]{ auto v = std::vector<int>(); v.reserve(5); std::generate_n(std::back_inserter(v), 5, [&i]{ return i++; }); return v; }); return result; }();