» Главная
eXcode.ru » Статьи » С / С++
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 7





Функциональные объекты библиотеки STL




    Функциональные объекты - это объекты, для которых определён operator(). Они важны для эффективного использования библиотеки. В местах, где ожидается передача указателя на функцию алгоритмическому шаблону, интерфейс установлен на приём объекта с определённым operator(). Это не только заставляет алгоритмические шаблоны работать с указателями на функции, но также позволяет им работать с произвольными функциональными объектами. Использование функциональных объектов вместе с функциональными шаблонами увеличивает выразительную мощность библиотеки также, как делает результирующий код более эффективным. Например, если мы хотим поэлементно сложить два вектора a и b, содержащие double, и поместить результат в a, мы можем сделать зто так:

transform(a.begin(), a.end(), b.begin(), a.begin(), plus<double>());

    Если мы хотим отрицать каждый элемент a, мы можем сделать это так:

transform(a.begin(), a.end(), a.begin(), negate<double>());

    Соответствующие функции вставят сложение и отрицание.

    Чтобы позволить адаптерам и другим компонентам манипулировать функциональными объектами, которые используют один или два параметра, требуется, чтобы они соответственно обеспечили определение типов (typedefs) argument_type и result_type для функциональных объектов, которые используют один параметр, и first_argument_type, second_argument_type и result_type для функциональных объектов, которые используют два параметра.

Базовые классы (Base)

    Следующие классы предоставляются, чтобы упростить определение типов (typedefs) параметров и результата:

template <class Arg, class Result> 
struct unary_function {
           typedef Arg argument_type;
           typedef Result result_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;
};

Арифметические операции (Arithmetic operations)

    Библиотека обеспечивает базовые классы функциональных объектов для всех арифметических операторов языка.

template <class T>
struct plus : binary_function<T, T, T> {
            Т operator()(const T& x, const T& y) const { return x + y; } 
};

template <class T>
struct minus : binary_function<T, T, T> {
             Т operator()(const T& x, const T& y) const { return x - y; } 
};

template <class T>
struct times : binary_function<T, T, T> {
             Т operator()(const T& x, const T& y) const ( return x *  y; } 
};

template <class T> 
struct divides : binary_function<T, T, T> {
               Т operator()(const T& x, const T& y) const { return x / y; }
};

template <class T>
struct modulus : binary_function<T, T, T> {
               Т operator()(const T& x, const T& y) const { return x % y; } 
};

template <class T> 
struct negate : unary_function<T, T> {
              Т operator()(const T& x) const { return -x; } 
};

Сравнения (Comparisons)

    Библиотека обеспечивает базовые классы функциональных объектов для всех операторов сравнения языка

template <class T>
struct equal_to : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x == y; } 
};

template <class T>
struct not_equal_to : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x != y; } 
};

template <class T>
struct greater : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x > y; }
};

template <class T>
struct less : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x < y; } 
};

template <class T> 
struct greater_equal : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x >= y; } 
};

template <class T> 
struct less_equal : binary_function<T, T, bool> {
         bool operator()(const T& x, const T& y) const { return x <= y; } 
};

Логические операции (Logical operations)

template <class T>
struct logical_and : binary_function<T, T, bool> {
          bool operator()(const T& x, const T& y) const { return x && y; } 
};

template <class T>
struct logical_or : binary_function<T, T, bool> {
          bool operator()(const T& x, const T& y) const { return x || y; } 
};

template <class T>
struct logical_not : unary_function<T, bool> {
          bool operator()(const T& x) const { return !x; } 
};
К началу статьи





Добавил: LedWormДата публикации: 2006-03-14 10:00:30
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 5637

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой жанр комп. игр вам нравится?
Стратегии
24% (55)
Action
17% (39)
RPG
36% (82)
RTS
1% (3)
Симуляторы
8% (18)
Квесты
7% (15)
Логические
3% (6)
Другой
5% (11)

Проголосовало: 229
EDIT твою мать!
FORMAT тебя за ногу!
Рейтинг: 1/10 (1)
Посмотреть все анекдоты