Pourquoi effectuer la sommation vers l'avant alors que vous pouvez la faire vers l'arrière ? Donné:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
Nous pouvons utiliser l'indice, en comptant à rebours:
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Nous pouvons utiliser la "souscription" vérifiée par intervalle (au cas où):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
Nous pouvons utiliser des itérateurs inverses dans une boucle for:
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
Nous pouvons utiliser des itérateurs avant, itérant en arrière, dans une boucle for (oooh, délicat!):
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
Nous pouvons utiliser accumulate
avec des itérateurs inversés:
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
Nous pouvons utiliser for_each
avec une expression lambda en utilisant des itérateurs inverses:
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Ainsi, comme vous pouvez le voir, il existe autant de façons de faire la somme du vecteur en arrière que de faire la somme du vecteur en avant, et certaines d'entre elles sont beaucoup plus intéressantes et offrent beaucoup plus de possibilités d'erreurs ponctuelles.