Сышышь ты, выходи сюда,
поговорим !

STL функторы | Обучение программированию онлайн

Опубликовано: 01.09.2018

видео STL функторы | Обучение программированию онлайн

Аппликативные функторы

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



#include <iostream> #include <list> #include <functional> #include <algorithm> using namespace std; void main() { list<int> numbers; for(int i = 0; i < 10; i++) numbers.push_back(rand() % 100); list<int>::iterator ptr; for(ptr = numbers.begin(); ptr != numbers.end(); ptr++) cout<<*ptr<<" "; cout<<endl; ptr = find_if(numbers.begin(), numbers.end(), bind2nd(greater_equal<int>(), 50) ); if(ptr == numbers.end() ) cout<<"not found"<<endl; else cout<<*ptr<<" found"<<endl; }

У нас есть список numbers из десяти элементов, которые мы заполняем случайным образом в диапазоне от 0 до 100. Мы хотим найти элемент списка, который больше или равен 50. При первом нахождении элемента, который отвечает нашему условию, функция find_if возвращает итератор найденного элемента и прекращает свою работу. В качестве первого и второго параметра принимает итератор первого и последнего элемента списка, т.е. numbers.begin() и numbers.end(). В функции find_if в качестве указателя на функцию предусмотрен только один параметр. Но нам нужно как-то связать функтор greater_equal и значение 50. Для этого мы используем функцию bind2nd() , которая называется связкой.


Функторы в с++ | Что такое функтор | Изучение С++ для начинающих. Урок #146

Функтор greater_equal относится к функторам операторов сравнения. Все функторы операторов сравнения: equal_to, not_equal_to, less, greater, less_equal, greater_equal.

 

 

Вы можете оставить комментарий ниже.

[C++] Функторы и предикаты

rss