Примитивы, определённые в библиотеке STL
В STL определены некоторые вспомогательные структуры и функции, облегчающие разработку приложений.
Например, чтобы избежать избыточности определений операторов сравнения, библиотека содержит следующее (заголовочный файл utility, пространство имен rel_ops):
Как видно, для некоторого класса достаточно определить операторы < и ==, остальные операторы будут построены автоматически на их основе.
Другим полезным определением в стандартной библиотеке является упорядоченная пара некоторых переменных различного типа. Выглядит это определение следующим образом:
Для упрощения создания упорядоченной пары введена функция 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
"подшивает" к функтору некоторое значение вторым параметром
Last updated