Front Page / Algorithms / Runtime Algorithms / for_each

# for_each

### Synopsis

    template<
          typename Sequence
        , typename F
        >
    void for_each( F f );

    template<
          typename Sequence
        , typename TransformOp
        , typename F
        >
    void for_each( F f );

### Description

`for_each` is a family of overloaded function templates:

- `for_each<Sequence>( f )` applies the runtime function object `f` to every element in the [`begin<Sequence>::type`, `end<Sequence>::type`) range.
- `for_each<Sequence,TransformOp>( f )` applies the runtime function object `f` to the result of the transformation `TransformOp` of every element in the [`begin<Sequence>::type`, `end<Sequence>::type`) range.

### Header

    #include <boost/mpl/for_each.hpp>

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`Sequence` | Forward Sequence | A sequence to iterate.
`TransformOp` | Lambda Expression | A transformation.
`f` | An unary function object | A runtime operation to apply.

### Expression semantics

For any Forward Sequence `s`, Lambda Expression `op` , and an unary function object `f`:

    for_each<s>( f );

Return type: | `void`

Postcondition:

Equivalent to

    typedef begin<Sequence>::type i1;
    value_initialized< deref<i1>::type > x1;
    f(boost::get(x1));

    typedef next<i1>::type i2;
    value_initialized< deref<i2>::type > x2;
    f(boost::get(x2));
    ...
    value_initialized< deref<in>::type > xn;
    f(boost::get(xn));
    typedef next<in>::type last;

where `n == size<s>::value` and `last` is identical to `end<s>::type`; no effect if `empty<s>::value == true`.

    for_each<s,op>( f );

Return type: | `void`

Postcondition:

Equivalent to

    for_each< tranform_view<s,op> >( f );

### Complexity

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

### Example

    struct value_printer
    {
        template< typename U > void operator()(U x)
        {
            std::cout << x << 'n';
        }
    };

    int main()
    {
        for_each< range_c<int,0,10> >( value_printer() );
    }

### See also

Runtime Algorithms, Views, `transform_view`