utilisation de std::accumulate

Besoin de plus joli solution de l'exemple ci-dessous, mais avec std::accumulate.

#include <algorithm>
#include <vector>
#include <iostream>

class Object
{
public:
    Object( double a, double b ):
        a_( a ),
        b_( b )
    {}

    double GetA() const { return a_; }
    double GetB() const { return b_; }
    //other methods
private:
    double a_;
    double b_;
};

class Calculator
{
public:
    Calculator( double& result ):
        result_( result )
    {}

    void operator() ( const Object& object )
    {
        //some formula
        result_ += object.GetA() * object.GetB();
    }
private:
    double& result_;
};

int main()
{
    std::vector< Object > collection;
    collection.push_back( Object( 1, 2 ) );
    collection.push_back( Object( 3, 4 ) );

    double result = 0.0;
    std::for_each( collection.begin(), collection.end(),
                   Calculator( result ) );

    std::cout << "result = " << result << std::endl;

    return 0;
}
Alors pourquoi ne pas utiliser std::accumulate? Quelle est exactement la question?
Bon, je me demandais qu'est-ce que mon code est manquant 🙂
Acumulate retourne quoi? J'ai pensé qu'il retourne le même type comme un objet, non?
vector<T>::value_type qui dans votre cas sera un double.
pourquoi vector<T>::valie_type est double et n'est l'Objet?

OriginalL'auteur Mykola Golubyev | 2009-03-06