The MPL Reference Manual: iter_fold

Front Page / Algorithms / Iteration Algorithms / iter_fold

# iter_fold

### Synopsis

    template<
          typename Sequence
        , typename State
        , typename ForwardOp
        >
    struct iter_fold
    {
        typedef unspecified type;
    };

### Description

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 each iterator in the range [`begin<Sequence>::type`, `end<Sequence>::type`) in order.

### Header

    #include <boost/mpl/iter_fold.hpp>

### Parameters

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 an arbitrary type `state`:

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

Return type: | A type.
Semantics: | Equivalent to
    typedef begin<s>::type i1;
    typedef apply<op,state,i1>::type state1;
    typedef next<i1>::type i2;
    typedef apply<op,state1,i2>::type state2;
    ...
    typedef apply<op,staten-1,in>::type staten;
    typedef next<in>::type last;
    typedef staten t;
where `n == size<s>::value` and `last` is identical to `end<s>::type`; equivalent to `typedef state t;` if `empty<s>::value == true`.

### Complexity

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

### Example

    typedef vector_c<int,5,-1,0,7,2,0,-5,4> numbers;
    typedef iter_fold<
          numbers
        , begin<numbers>::type
        , if_< less< deref<_1>, deref<_2> >,_2,_1 >
        >::type max_element_iter;

    BOOST_MPL_ASSERT_RELATION( deref<max_element_iter>::type::value, ==, 7 );

### See also

Algorithms, reverse_iter_fold, fold, reverse_fold, copy