Pourquoi effectuer la sommation vers l'avant lorsque vous pouvez le faire à l'envers? Soit :
std::vector v; // vecteur à sommer
int sum_of_elements(0); // résultat de la sommation
Nous pouvons utiliser la notation entre crochets, en comptant à rebours :
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Nous pouvons utiliser la notation entre crochets avec vérification de la portée, en comptant à rebours (au cas où) :
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
Nous pouvons utiliser des itérateurs inversés dans une boucle for :
for(std::vector::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
Nous pouvons utiliser des itérateurs normaux, itérant à rebours, dans une boucle for (oooh, malin!) :
for(std::vector::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 inversés :
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Ainsi, comme vous pouvez le constater, il existe autant de façons de faire la sommation du vecteur à l'envers que de le faire à l'endroit, et certaines de ces méthodes sont bien plus excitantes et offrent beaucoup plus d'opportunités d'erreurs d'un élément.
2 votes
"Combien"? Vraiment ? Cela semble être une question très vague. :p Il serait peut-être plus utile de demander une bonne façon de le faire.
3 votes
Que voulez-vous dire quand vous dites "fonction similaire à?" Cherchez-vous un remplacement pour
std::accumulate
dans Boost? (Si oui, pourquoi?) Cherchez-vous des fonctions qui font quelque chose de similaire àstd::accumulate
? (Si oui, quoi?)4 votes
Si vous voulez quelque chose de similaire à
std::accumulate
, on suppose que vous le voulez aussi différent à certains égards (sinon vous pourriez simplement utiliserstd::accumulate
); quelles différences destd::accumulate
recherchez-vous?