Warum die Summierung vorwärts durchführen, wenn Sie sie rückwärts ausführen können ? Gegeben:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
Wir können Subskription verwenden und rückwärts zählen:
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Wir können bereichsüberprüfte "Subskriptionen" verwenden, die rückwärts zählen (nur für den Fall):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
Wir können Reverse-Iteratoren in einer for-Schleife verwenden:
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
Wir können Vorwärtsiteratoren verwenden, die rückwärts in einer for-Schleife iterieren (oooh, knifflig!):
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
Wir können accumulate
mit Reverse-Iteratoren verwenden:
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
Wir können for_each
mit einem Lambda-Ausdruck unter Verwendung von Umkehriteratoren verwenden:
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Wie Sie sehen, gibt es also genauso viele Möglichkeiten, den Vektor rückwärts zu summieren wie den Vektor vorwärts, und einige davon sind viel aufregender und bieten weitaus größere Möglichkeiten für Fehler, die nacheinander auftreten.