동일한 크기의 벡터 벡터를 만들려면 하나의 초기화 줄을 사용하여 어떻게해야합니까?중첩 된 벡터의 크기 초기화
예컨대
std::vector<std::vector<int>> vv(5)
은 기본적으로 5 개의 벡터를 초기화하지만이 5 개의 벡터를 크기로 초기화하는 방법은 무엇입니까? 다음과 같은
동일한 크기의 벡터 벡터를 만들려면 하나의 초기화 줄을 사용하여 어떻게해야합니까?중첩 된 벡터의 크기 초기화
예컨대
std::vector<std::vector<int>> vv(5)
은 기본적으로 5 개의 벡터를 초기화하지만이 5 개의 벡터를 크기로 초기화하는 방법은 무엇입니까? 다음과 같은
:
std::vector< std::vector<int> > vv(5, std::vector<int>(5, 0)); // Initialize with 0
람다는 하나의 라인이 실제로 원하는 것일 경우 매우 복잡한 초기화를 허용합니다.
이 문장은
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;
}();
당신이 단순히 한 줄에 원하는 경우 ... 순서를 포함 각각 5 개 벡터, 0-4, 5-9, 10-14의 벡터를 생성 (... 아니, 난 정말이 조언을하지 않는다)
자동차 및 i``@lllllllllll
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; }();
을하거나 사본을 수정하고 모든 공간을 제거합니다. 그러나 그것은 한 줄 초기화가 아닙니다. – interjay
C++ 배열을 사용하지 않는 이유는 무엇입니까? 다음 줄에 resize를 사용하고 아래의 해결책 ('... vv (5, std :: vector (5, 0));')을 사용하는 것이 좋습니다. int 값 대신에'OP' 로직을 기반으로하는 크기가 1 인 int 배열을 사용할 수 있습니다. –
lllllllllll