Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Front Page / Algorithms / Iteration Algorithms / accumulate



      typename Sequence
    , typename State
    , typename ForwardOp
struct accumulate
    typedef unspecified type;


Returns the result of the successive application of binary ForwardOp to the result of the previous ForwardOp invocation (State if it's the first call) and every element of the sequence in the range [begin<Sequence>::type, end<Sequence>::type) in order. [Note: accumulate is a synonym for foldend note]


#include <boost/mpl/accumulate.hpp>


Parameter Requirement Description
Sequence Forward Sequence A sequence to iterate.
State Any type The initial state for the first ForwardOp application.
ForwardOp Binary Lambda Expression The operation to be executed on forward traversal.

Expression semantics

For any Forward Sequence s, binary Lambda Expression op, and arbitrary type state:

typedef accumulate<s,state,op>::type t; 
Return type:A type.

Equivalent to

typedef fold<s,state,op>::type t; 


Linear. Exactly size<s>::value applications of op.


typedef vector<long,float,short,double,float,long,long double> types;
typedef accumulate<
    , int_<0>
    , if_< is_float<_2>,next<_1>,_1 >
    >::type number_of_floats;

BOOST_MPL_ASSERT_RELATION( number_of_floats::value, ==, 4 );

See also

Algorithms, fold, reverse_fold, iter_fold, reverse_iter_fold, copy, copy_if