Шаблонна функція std::for_each призначена для перебору елементів послідовності, яка обмежена ітераторами, і застосування до кожного вказаної функції. Оголошення даної шаблонної функції виглядає приблизно наступним чином:
template <class InputIterator, class Function>
Function for_each (InputIterator begin, InputIterator end, Function fn) ;
Перші два параметри begin і end являються ітераторами і призначені для обмеження послідовності до якої буде застосована спеціальна функція fn. До слова, параметр fn може являтися функціональним об'єктом.

Приклади

Приклад #1

Розглянемо простий приклад використання функції for_each - створимо функцію, яка просто виводить переданий їй елемент на екран і передамо даному алгоритму масив цілих чисел і створену спеціальну функцію.
#include <algorithm> /* усі корисні алгоритми включно з max_element */
#include <iostream> /* об'єкт cout */
using namespace std ; /* друкуємо усе без std */

/* шаблонна функція, яка виводить переданий їй елемент 
** у вікно терміналу плюс крапку з комою і пробіл */
template <typename T> void print_element (T el)
{ cout << el << "; " ; }

/* головна функція програми */
int main (int argc, char** argv)
{
  /* створюємо піддослідний масив цілих чисел і визначаємо його довжину */
  int iArray [] = {5,6,1,56,7,234,7,8,45,65,87} ;
  int iLen = sizeof (iArray)/sizeof(iArray[0]) ;

  /* для наглядності повідомляємо користувача,
  ** що ми виводимо на екран */
  cout << "Усі елементи масиву:" << endl ;

  /* виводимо елементи на екран */
  for_each (iArray, iArray+iLen, print_element<int>) ;

  /* друкуємо новий рядок */
  cout << endl ;
  
  return 0 ;
}
Вивід програми наступний: cpp_std_for_each_sample1-cxx_demo_program_output

Приклад #2

Розглянемо приклад в якому ми будемо змінювати значення об'єкта класу std::vector, який призначений для зберігання послідовності об'єктів класу std::string.
#include <algorithm> /* усі корисні алгоритми включно з max_element */
#include <vector>
#include <iostream> /* об'єкт cout */
using namespace std ; /* друкуємо усе без std */

/* шаблонна функція, яка в якості параметру отримує тип 
** з підтримкою ітераторів і методів begin(), end();
** після чого в послідовності замінює усі елементи з значенням 
** пробілу на символ нижнього підкреслення */
template <typename T> void change_spaces_to_underscores (T& el)
{ 
  for (typename T::iterator iter=el.begin(); iter!=el.end(); ++iter)
  {
    if (*iter==' ')
    { *iter = '_' ; }
  }
}

/* головна функція програми */
int main (int argc, char** argv)
{
  /* cстворюємо піддослідний вектор для класу string */
  vector<string> strs ;

  /* заповнюємо значеннями з пробілами */
  strs.push_back (string("object 1")) ;
  strs.push_back (string("object 2")) ;
  strs.push_back (string("object 3")) ;

  /* застосовуємо алгоритм for_each з новою функцією */
  for_each (strs.begin(), strs.end(), change_spaces_to_underscores<string>) ;


  /* виводимо нові значення елементів вектора */
  cout << "Нові значення елементів вектора:" << endl ;
  
  for (vector<string>::iterator iter=strs.begin();
       iter!=strs.end();
       ++iter)
  { cout << *iter << endl ; }
  
  return 0 ;
}
Вивід програми: cpp_std_find_if_sample2-cxx_demo_program_output