На этом шаге мы рассмотрим простой примеры передачи функций в аргументах алгоритмов.
Некоторым алгоритмам могут передаваться пользовательские функции, которые вызываются в процессе внутренней работы алгоритма. Такая возможность делает алгоритмы еще более гибкими и мощными.
Передачу функции проще всего рассматривать на примере алгоритма 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. Результат работы приложения
На следующем шаге мы закончим изучение этого вопроса.