.working ======= <<<<<<< .working >>>>>>> .merge-right.r57125 ======= >>>>>>> .merge-right.r58299
![]() |
Home | Libraries | People | FAQ | More |
<<<<<<< .working
For a sequence Seq, initial
state, and binary function object or function pointer f,
accumulate repeatedly applies binary f
to each element of Seq
and the previous state.
=======
For a sequence seq
, initial
state initial_state
,
and binary function object or function pointer f
,
accumulate returns the result of the repeated application of binary
f
to the result of the
previous f
invocation
(inital_state
if it is
the first call) and each element of seq
.
>>>>>>> .merge-right.r57125
template< typename Sequence, typename State, typename F > typename result_of::accumulate<Sequence, State, F>::type accumulate( Sequence& seq, State const& initial_state, F const& f);
Table 1.34. Parameters
Parameter |
Requirement |
Description |
|||
---|---|---|---|---|---|
seq |
A model of Forward Sequence, f(eN ....f(e2,f(e1,initial_state))) must be a valid expression for each element e1 to eN in seq |
======= |
|
A model of Forward
Sequence, |
>>>>>>> .merge-right.r57125 Operation's argument |
initial_state |
Any type |
Initial state |
|||
f |
boost::result_of<F(E,S)>::type is the return type of f(e,s) for each element e of type E in seq, and current state s of type S |
======= |
|
|
>>>>>>> .merge-right.r57125 Operation's argument |
accumulate(seq, initial_state, f);
Return type: Any type
<<<<<<< .working
Semantics: Equivalent to f(eN ....f(e2,f(e1,initial_state)))
where e1 ...eN are the elements of seq.
=======
Semantics: Equivalent to f(... f(f(initial_state,e1),e2) ...eN)
where e1
...eN
are the elements of seq
.
>>>>>>> .merge-right.r57125
Linear, exactly result_of::size<Sequence>::value applications of f.
#include <boost/fusion/algorithm/iteration/accumulate.hpp> #include <boost/fusion/include/accumulate.hpp>
struct make_string { typedef std::string result_type; template<typename T> std::string operator()(const std::string& str, const T& t) const { return str + boost::lexical_cast<std::string>(t); } }; ... const vector<int,int> vec(1,2); assert(accumulate(vec,std::string(""), make_string()) == "12");