< cpp‎ | algorithm
Revision as of 20:08, 5 February 2013 by Nate (Talk | contribs)

Algorithm library
Execution policies (C++17)
Non-modifying sequence operations
Modifying sequence operations
Operations on uninitialized storage
Partitioning operations
Sorting operations
Binary search operations
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations

Numeric operations
C library

Template:ddcl list begin <tr class="t-dsc-header">

Defined in header <algorithm>

<td></td> <td></td> </tr> <tr class="t-dcl ">

<td class="t-dcl-nopad">
template< class InputIt, class UnaryFunction >
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

<td class="t-dcl-nopad"> </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end

Applies the given function object f to the result of dereferencing every iterator in the range [first, last), in order. If InputIt is a mutable iterator, f may modify the elements of the range through the dereferenced iterator. If f returns a result, the result is ignored.



first, last - the range to apply the function to
f - the unary function object to be applied
Type requirements
InputIt must meet the requirements of InputIterator.
UnaryFunction must meet the requirements of MoveConstructible. Does not have to be CopyConstructible

Return value

f. (until C++11)
std::move(f). (since C++11)


Exactly last - first applications of f

Possible implementation

template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
    for (; first != last; ++first) {
    return f;


The following example uses a lambda function to increment all of the elements of a vector and then computes a sum of them:

#include <vector>
#include <algorithm>
#include <iostream>
struct Sum {
    Sum() { sum = 0; }
    void operator()(int n) { sum += n; }
    int sum;
int main()
    std::vector<int> nums{3, 4, 2, 9, 15, 267};
    std::cout << "before: ";
    for (auto n : nums) {
        std::cout << n << " ";
    std::cout << '\n';
    std::for_each(nums.begin(), nums.end(), [](int &n){ n++; });
    Sum s = std::for_each(nums.begin(), nums.end(), Sum());
    std::cout << "after:  ";
    for (auto n : nums) {
        std::cout << n << " ";
    std::cout << '\n';
    std::cout << "sum: " << s.sum << '\n';


before: 3 4 2 9 15 267
after:  4 5 3 10 16 268
sum: 306

See also

Template:cpp/algorithm/dcl list transformTemplate:cpp/language/dcl list range-for