Apache C++ Standard Library Reference Guide

## for_each()

Library: Algorithms

    Function

- Local Index
- Summary
- Synopsis
- Description
- Complexity
- Example
- See Also
- Standards Conformance

### Local Index

No Entries

### Summary

Algorithm that applies a function to each element in a range

### Synopsis

    #include <algorithm>

    namespace std {
      template <class InputIterator, class Function>
      void Function for_each(InputIterator start,
                             InputIterator finish,
                             Function f);
    }

### Description

The `for_each()` algorithm applies the function object `f` to each value in the range `[start, finish)`, where `start` and `finish` are iterators that define the sequence. Since this a non-mutating algorithm, the function `f` cannot make any modifications to the sequence, but it can achieve results through side effects (such as copying or printing). If `f` returns a result, the result is ignored.

`for_each()` returns the function object `f`.

### Complexity

The function object `f` is applied exactly `finish - start` times.

### Example

    //
    // for_each.cpp
    //

    #include <algorithm>    // for for_each
    #include <functional>   // for less, unary_function
    #include <iostream>     // for cout, endl
    #include <set>          // for set

    // Function object that outputs its argument times x.
    template <class Arg>
    class out_times_x:  public std::unary_function<Arg, void>
    {
        Arg multiplier;
    public:
        out_times_x(const Arg &x) : multiplier (x) { }

        void operator()(const Arg &x) const {
            std::cout << x * multiplier << " " << std::endl;
        }
    };

    int main ()
    {
        // Typedef for convenience.
        typedef std::set<int, std::less<int>,
                         std::allocator<int> > sequence;

        sequence::value_type arr [] = { 1, 2, 3, 4, 5 };

        // Populate a sequence from arr.
        sequence s(arr, arr + sizeof arr / sizeof *arr);

        // Construct a function object.
        out_times_x<sequence::value_type> f2(2);

        // Apply function object's operator() to each element.
        std::for_each(s.begin(), s.end(), f2);

        return 0;
    }

    Program Output

    2
    4
    6
    8
    10

### See Also

Algorithms, Function Objects

### Standards Conformance

ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 25.1.1