Шаг 265.
Библиотека STL.
Алгоритмы STL. Алгоритм for_each

    На этом шаге мы начнем рассмотривать использование алгоритма for_each.

    Алгоритм for_each() обладает чрезвычайно гибкими возможностями. С его помощью можно производить разнообразную обработку и модификацию каждого элемента.

  UnaryProc
  for_each (InputIterator beg, InputIterator end, UnaryProc op)

    Вызывает унарный предикат op(elem) для каждого элемента elem в интервале [beg,end). Возвращает копию ор (измененную в процессе выполнения). Операция ор может модифицировать элементы. На 257 шаге алгоритм for_each() сравнивается с алгоритмом transform(), который решает ту же задачу, но несколько иным способом.

    Возвращаемые значения ор игнорируются.

    Сложность линейная (numberOfElements вызовов ор).

    В следующем примере алгоритм for_each() вызывает для каждого элемента функцию print(), которая выводит текущее значение элемента.

//---------------------------------------------------------------------------

#include <vcl.h>
#include "algostuff.hpp"

#include <conio.h> //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;


std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}

// Функция, вызываемая для каждого элемента
void print (int elem)
{
    cout << elem << ' ';
}

int main()
{
  vector<int> coll;

  INSERT_ELEMENTS(coll,1,9);

  // Вывод элементов
  cout << ToRus("Вывод элементов:\n");
  for_each (coll.begin(), coll.end(),  // Интервал
            print);                    // Операция
  cout << endl;

  getch();
  return 0;
}

//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Программа выводит следующий результат:


Рис.1. Результат работы приложения

    Чтобы вызвать для каждого элемента функцию его класса, необходимо использовать адаптеры mem_fun.

    На следующем шаге мы продолжим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг