Требуется более красивое решение нижеприведенного примера, но с 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;
}
