...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
,
iter_fold
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 iterators on each element of seq
.
template< typename Sequence, typename State, typename F > typenameresult_of::iter_fold
<Sequence, State const, F>::type iter_fold( Sequence& seq, State const& initial_state, F f); template< typename Sequence, typename State, typename F > typenameresult_of::iter_fold
<Sequence const, State const, F>::type iter_fold( Sequence const& seq, State const& initial_state, F f); template< typename Sequence, typename State, typename F > typenameresult_of::iter_fold
<Sequence, State, F>::type iter_fold( Sequence& seq, State& initial_state, F f); template< typename Sequence, typename State, typename F > typenameresult_of::iter_fold
<Sequence const, State, F>::type iter_fold( Sequence const& seq, State& initial_state, F f);
Table 1.42. Parameters
Parameter 
Requirement 
Description 


A model of Forward Sequence 
Operation's argument 

Any type 
Initial state 


Operation's argument 
iter_fold(seq, initial_state, f);
Return type: Any type
Semantics: Equivalent to f(...
f(f(initial_state,it1),it2) ...itN)
where it1 ...itN
are consecutive iterators on the elements of seq
.
Linear, exactly
applications of result_of::size
<Sequence>::valuef
.
#include <boost/fusion/algorithm/iteration/iter_fold.hpp> #include <boost/fusion/include/iter_fold.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>(deref
(t)); } }; ... constvector
<int,int> vec(1,2); assert(iter_fold(vec,std::string(""), make_string()) == "12");