jeudi 5 mars 2009

[Truc C++] Opérations mathématiques sur des éléments d'une séquence

La méthode std::accumulate() est utile pour faire des opérations mathématiques sur une suite d'élements délimitée par des itérateurs par exemple les éléments d'un vecteur. Le premier paramètre est l'itérateur de départ, le deuxième paramètre est l'itérateur de fin. Le troisième élement est la valeur de départ, souvent 0 pour une somme et 1 pour une multiplication. Le quatrième paramètre, qui est optionnel, est une opération binaire à appliquer, par défaut c'est la somme. Avec cette méthode, on se rapproche de la programmation fonctionnelle!

#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
#include <functional> // pour la multiplication

using std::vector;
using std::cout;
using std::accumulate;

int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);

cout << accumulate(v.begin(), v.end(),0) << std::endl;
cout << accumulate (v.begin (), v.end (), 1,
std::multiplies<int>());

return 0;
}

Tout bon mathématicien du dimanche pourrait prédire que les sorties de ce programme sont 10 et 24.

Aucun commentaire:

Enregistrer un commentaire