• Базовые классы (Base)
  • Арифметические операции (Arithmetic operations)
  • Сравнения (Comparisons)
  • Логические операции (Logical operations)
  • Функциональные объекты

    Функциональные объекты - это объекты, для которых определён 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;}

    };








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх