Compte tenu du tableau à deux dimensionsEn utilisant std :: accumuler sur un std :: tableau à deux dimensions
std::array<std::array<int, 2>, 3> m = {{ {1, 2}, {3, 4}, {5, 6} }};
Je cherche la somme de tous ses éléments - dans ce cas, le tableau 21. Had été unidimensionnelle, je pourrais avoir écrit
auto sum = std::accumulate(m.begin(), m.end(), 0);
mais pour mon tableau à deux dimensions, cette tentative échoue avec l'erreur plutôt compréhensible
no match for 'operator+' (operand types are 'int' and 'std::array<int, 2ul>')
Comment puis-je calculer avec élégance cette somme pour ma matrice 2D (en évitant les boucles for-loops, en préférant les algorithmes STL)? Peut-il être fait avec un doublure comme pour le cas unidimensionnel, ou devient-il plus complexe?
Quel est votre résultat souhaité? '21' ou' {9, 12} '? – Barry
Mon résultat escompté est de 21. –
Je n'ai pas l'énergie pour élaborer les détails, mais vous pouvez écrire un itérateur qui sait comment parcourir un tableau à deux dimensions. Fondamentalement, il marcherait à travers une rangée du tableau et quand il atteint la fin de la rangée, passer à la rangée suivante. C'est un peu plus difficile à écrire que les appels imbriqués de Rakete111 à 'std :: accumulate', mais c'est plus général: vous pouvez utiliser cet itérateur pour l'algorithme ** any **. (Si quelqu'un veut travailler sur les détails, n'hésitez pas à poster votre code comme réponse) –