...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
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
.
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.38. Parameters
Parameter |
Requirement |
Description |
---|---|---|
|
A model of Forward
Sequence, |
Operation's argument |
|
Any type |
Initial state |
|
|
Operation's argument |
accumulate(seq, initial_state, f);
Return type: Any type
Semantics: Equivalent to f(... f(f(initial_state,e1),e2) ...eN)
where e1
...eN
are the elements of seq
.
Linear, exactly
applications of result_of::size
<Sequence>::valuef
.
#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); } }; ... constvector
<int,int> vec(1,2); assert(accumulate
(vec,std::string(""), make_string()) == "12");