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; }();
@lllllllllll 'авто & i' или вы изменяете копию. Но это не однострочная инициализация в любом случае. – interjay
Почему бы не использовать массив C++? Лучше использовать изменение размера на следующей строке, а затем решения ниже ('... vv (5, std :: vector (5, 0));'). Я могу вместо значений int использовать int массивы размера 1 на основе логики 'OP'. –
lllllllllll