Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП на языке С++.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.8 Mб
Скачать

8.7. Объекты-функции

Объект-функция – это экземпляр класса, в котором перегружена операция «круглые скобки» (). В ряде случаев удобно заменить функции сравнения на объекты-функции. Когда объект-функция используется в качестве функции, то для её вызова используется operator().

Примеры 8.6.7. Сравнение двух целых

class less{

public:

bool operator()(int x,int y){return x<y;}

};

Можно сделать шаблон класса для сравнения данных любых типов.

template<class T> class less{

public:

bool operator()(const T& x,const T& y)const{return x<y;}};

Следует иметь в виду, что для типа T должна быть определена операция меньше(<).

В STL определены вспомогательные базовые классы, поддерживающие единое определение типов аргументов и типа возвращаемого значения для различных объектов функций с одним и двумя аргументами. Это шаблоны unary functions и binary_function, которые доступны при подключении заголовочного файла< functional >.

template<class Arg, class Result>struct unary_function

{typedef Arg argument_type;typedef Result result_type;};

Этот шаблон служит базовым для классов, в которых операция «круглые скобки» определена в форме

result_type operator()(argument_type)

template<class Arg1, class Arg2, class Result>

struct binary_function {

typedef Arg1 first_argument_type;

typedef Arg2 second_argument_type;

typedef Result result_type;

};

Этот шаблон служит базовым для классов, в которых операция «круглые скобки» определена в форме

result_type operator()(first_argument_type,

second_argument_type)

В STL также определен шаблон less.

template<class T> struct less: public binary_function<T,T,bool>;

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

8.8. Алгоритмы

Каждый алгоритм выражается шаблоном функции или набором шаблонов функций. Таким образом, алгоритм может работать с очень разными контейнерами, содержащими значения разнообразных типов. Алгоритмы, которые возвращают итератор, как правило, для сообщения о неудаче используют конец входной последовательности. Алгоритмы не выполняют проверки диапазона на их входе и выходе. Когда алгоритм возвращает итератор, это будет итератор того же типа, что и был на входе. Алгоритмы в STL реализуют большинство распространенных универсальных операций с контейнерами, такие как просмотр, сортировку, поиск, вставку и удаление элементов. Алгоритмы доступны при включении заголовочного файла <algorithm>

Ниже приведены имена некоторых наиболее часто используемых функций – алгоритмов STL.

I. Немодифицирующие операции

for_earch() выполняет операции для каждого элемента последовательности

find() находит первое вхождение значения в последовательность

find_if() находит первое соответствие предикату в последовательности

count() подсчитывает количество вхождений значения в последовательность

count_if() подсчитывает количество выполнений предиката в последовательности

search() находит первое вхождение последовательности как подпоследовательности

search_n() находит n-е вхождение значения в последовательность