## for_each

    Algorithm

- Summary
- Data Type and Member Function Indexes
- Synopsis
- Description
- Complexity
- Example
- Warnings
- See Also

### Summary

Applies a function to each element in a range.

### Data Type and Member Function Indexes
(exclusive of constructors and destructors)

None

### Synopsis

    #include <algorithm>
    template <class InputIterator, class Function>
     void for_each(InputIterator first, InputIterator last,
                   Function f);

### Description

The for_each algorithm applies function `f` to all members of the sequence in the range `[first, last)`, where `first` and `last` 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.

### Complexity

The function `f` is applied exactly `last - first` times.

### Example

    //
    // for_each.cpp
    //
    #include <vector>
    #include <algorithm>
    #include <functional>
    #include <iostream>
    using namespace std;

     // Function class that outputs its argument times x
     template <class Arg>
     class out_times_x :  private unary_function<Arg,void>
     {
       private:
          Arg multiplier;

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

     int main()
     {
       int sequence[5] = {1,2,3,4,5};

       // Set up a vector
       vector<int> v(sequence,sequence + 5);

       // Setup a function object
       out_times_x<int> f2(2);

       for_each(v.begin(),v.end(),f2);   // Apply function

       return 0;
     }

Program Output

    2
    4
    6
    8
    10

### Warnings

If your compiler does not support default template parameters, then you always need to supply the `Allocator` template argument. For instance, you have to write:

`vector<int, allocator<int> >`

instead of:

`vector<int>`

If your compiler does not support namespaces, then you do not need the using declaration for `std`.

### See Also

Algorithms, Function Objects

Copyright (c) 1998, Rogue Wave Software, Inc.
Send mail to report errors or comment on the documentation.
OEM Release, June 1998