Алгоритмы 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.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий