...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

Front Page / Algorithms / Iteration Algorithms / accumulate |

template< typename Sequence , typename State , typename ForwardOp > struct accumulate { typedefunspecifiedtype; };

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 `fold` — *end 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. |

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

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

Return type: | A type. |
---|---|

Semantics: | 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< types , int_<0> , if_< is_float<_2>,next<_1>,_1 > >::type number_of_floats; BOOST_MPL_ASSERT_RELATION( number_of_floats::value, ==, 4 );