初始化嵌套向量的大小

时间:2016-06-05 19:29:19

标签: c++ c++11 stdvector

如果我想创建相同大小的矢量矢量,我该如何使用一条初始化线?

e.g。

std::vector<std::vector<int>> vv(5)会默认初始化5个向量,但是如何将这5个向量初始化为一个大小?

3 个答案:

答案 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; }();