Шаг 111.
Библиотека STL.
Примеры передачи функций в аргументах алгоритмов

    На этом шаге мы рассмотрим простой примеры передачи функций в аргументах алгоритмов.

    Некоторым алгоритмам могут передаваться пользовательские функции, которые вызываются в процессе внутренней работы алгоритма. Такая возможность делает алгоритмы еще более гибкими и мощными.

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

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

#include <vcl.h>
#include <iostream>
#include <vector>
#include <algorithm>
#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(int argc, char* argv[])
{
  vector<int> coll;
  // Вставка элементов со значениями от 1 до 9
  for (int i=1; i<=9; ++i) {
    coll.push_back(i);
  }

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

  getch();
  return 0;
}
//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Алгоритм for_each() вызывает функцию print() для каждого элемента в интервале [coll.begin(),coll.end()). Результат выполнения программы выглядит так:


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

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




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