Примитивы, определённые в библиотеке STL

В STL определены некоторые вспомогательные структуры и функции, облегчающие разработку приложений.

Например, чтобы избежать избыточности определений операторов сравнения, библиотека содержит следующее (заголовочный файл utility, пространство имен rel_ops):

template <class Tl, class T2>
inline bool operator !=(const T1& x, const T2& y) { 
     return !(x == y);
}

template <class Tl, class T2>
inline bool operator >(const T1& x, const T2& y) {
    return y < x;
}

template <class Tl, class T2>
inline bool operator <=(const T1& x, const T2& y) { 
     return !(y < x);
}

template <class Tl, class T2>
    inline bool operator >=(const T1& x, const T2& 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

"подшивает" к функтору некоторое значение вторым параметром

Last updated