В STL определены некоторые вспомогательные структуры и функции, облегчающие разработку приложений.
Например, чтобы избежать избыточности определений операторов сравнения, библиотека содержит следующее (заголовочный файл utility, пространство имен rel_ops):
template<classTl,classT2>inlinebooloperator!=(constT1&x,constT2&y){return!(x == y);}template<classTl,classT2>inlinebooloperator>(constT1&x,constT2&y){return y < x;}template<classTl,classT2>inlinebooloperator<=(constT1&x,constT2&y){return!(y < x);}template<classTl,classT2>inlinebooloperator>=(constT1&x,constT2&y){return!(x < y);}
Как видно, для некоторого класса достаточно определить операторы < и ==, остальные операторы будут построены автоматически на их основе.
Другим полезным определением в стандартной библиотеке является упорядоченная пара некоторых переменных различного типа. Выглядит это определение следующим образом:
Для упрощения создания упорядоченной пары введена функция make_pair, которая выглядит следующим образом:
В стандартной библиотеке большинство алгоритмов оперируют функциональными объектами. Базовыми классами для этих объектов являются классы unary_function и binary_function (объявлены в заголовочном файле functional):
Рекомендуется и пользовательские функциональные объекты наследовать от этих классов. На основе данных структур в STL объявлены некоторые полезные функторы:
Арифметические операции:
Описание
plus
шаблонный функтор сложения
minus
шаблонный функтор вычитания
multiplies
шаблонный функтор умножения
divides
шаблонный функтор деления
modulus
шаблонный функтор вычисления модуля
Принципиальная реализация данных функторов подобна реализации функтора plus (с )
Операции сравнения:
Описание
equal_to
шаблонный функтор сравнения
not_equal_to
шаблонный функтор неравенства
greater
шаблонный функтор, оператор >
less
шаблонный функтор, оператор <
greater_equal
шаблонный функтор, оператор >=
less_equal
шаблонный функтор, оператор <=
Логические операции:
logical_and
шаблонный функтор, логическое и
logical_or
шаблонный функтор, логическое или
logical_not
шаблонный функтор, логическое отрицание
Эти операции могут использоваться совместно с алгоритмами, изменяющими последовательности.
Адапторы
Адапторы являются специальными функторами, которые "изменяют" (на самом деле создают новый тип) существующие функторы. Например, подшивки позволяют преобразовать бинарный функтор в унарный, фиксируя в качестве одного из параметров некоторое значение.
Отрицатели
not1
возвращает отрицание унарного функтора
not2
возвращает отрицание бинарного функтора
Подшивки
bind1st
"подшивает" к функтору некоторое значение первым параметром
bind2nd
"подшивает" к функтору некоторое значение вторым параметром