Biorąc pod tablicą dwuwymiarowąUżywanie std :: gromadzą się na dwuwymiarowej std :: array
std::array<std::array<int, 2>, 3> m = {{ {1, 2}, {3, 4}, {5, 6} }};
szukam sumy wszystkich jego elementów - w tym przypadku 21. Gdyby tablicę były jednowymiarowe, mogłem napisany
auto sum = std::accumulate(m.begin(), m.end(), 0);
ale dla mojej tablicy dwuwymiarowej, to się nie powiedzie się z powodu błędu raczej zrozumiały
no match for 'operator+' (operand types are 'int' and 'std::array<int, 2ul>')
Jak mogę elegancko obliczyć tę sumę dla mojej tablicy 2D (unikając pętli for, preferując algorytmy STL)?
Czy można to zrobić za pomocą jednego liniowca, jak w przypadku jednowymiarowym, czy też staje się on bardziej złożony?
Jaki jest twój pożądany rezultat? '21' lub' {9, 12} '? – Barry
Pożądany wynik to 21. –
Nie mam energii do opracowania szczegółów, ale możesz napisać iterator, który wie, jak przejść przez dwuwymiarową tablicę. Zasadniczo przejdzie on przez jeden rząd tablicy i kiedy dotrze do końca wiersza, przejdź do następnego wiersza. To trochę trudniejsze do napisania niż zagnieżdżone wywołania Rakete111 do 'std :: accumulate', ale jest bardziej ogólne: możesz użyć tego iteratora dla ** dowolnego algorytmu **. (Jeśli ktoś chce dopracować szczegóły, napisz swój kod jako odpowiedź) –