РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)
Шрифт:
template ‹class Predicate›
class unary_negate: public unary_function‹Predicate::argument_type, bool› {
protected:
Predicate pred;
public:
unary_negate(const Predicate& x): pred(x) {}
bool operator(const argument_type& x) const {return !pred(x);}
};
template ‹class Predicate›
unary_negate‹Predicate› not1(const Predicate& pred) {
return unary_negate‹Predicate›(pred);
}
template ‹class Predicate›
class binary_negate: public binary_function‹Predicate::first_argument_type, Predicate::second_argument_type, bool› {
protected:
Predicate pred;
public:
binary_negate(const Predicate& x): pred(x) {}
bool operator(const first_argument_type& x, const second_argument_type& y) const {
return !pred(x, y);
}
};
template ‹class Predicate›
binary_negate‹Predicate› not2(const Predicate& pred) {
return binary_negate‹Predicate›(pred);
}
Привязки (Binders)
Привязки bind1st
template ‹class Predicate›
class binder1st: public unary_function {
protected:
Operation op;
Operation::first_argument_type value;
public:
binder1st(const Operation& x, const Operation::first_argument_type& y) : op(x), value(y) {}
result_type operator(const argument_type& x) const {
return op(value, x);
}
};
template ‹class Operation, class T›
binder1st‹Operation› bind1st(const Operation& op, const T& x) {
return binder1st‹Operation›(op, Operation::first_argument_type(x));
}
template ‹class Operation›
class binder2nd: public unary_function‹0peration::first_argument_type, Operation::result_type› {
protected:
Operation op;
Operation::second_argument_type value;
public:
binder2nd(const Operation& x, const Operation::second_argument_type& y) : op(x), value(y) {}
result_type operator(const argument_type& x) const {
return op(x, value);
}
};
template ‹class Operation, class T›
binder2nd‹Operation› bind2nd(const Operation& op, const T& x) {
return binder2nd‹0peration›(op, Operation::second_argument_type(x));
}
Например, find_if(v.begin, v.end, bind2nd(greater‹int›, 5))
Адаптеры указателей на функции (Adaptors for pointers to functions)
Чтобы позволить указателям на (унарные и бинарные) функции работать с функциональными адаптерами, библиотека обеспечивает следующее:
template ‹class Arg, class Result›
class pointer_to_unary_function: public unary_function‹Arg, Result› {
protected:
Result (*ptr)(Arg);
public:
pointer_to_unary_function {}
pointer_to_unary_function(Result (*x)(Arg)): ptr(x) {}
Result operator(Arg x) const {return ptr(x);}
};
template ‹class Arg, class Result›
pointer_to_unary_function‹Arg, Result› ptr_fun(Result (*x)(Arg)) {
return pointer_to_unary_function‹Arg, Result›(x);
}
template
class pointer_to_binary_function: public binary_function {
protected:
Result (*ptr)(Arg1, Arg2);
public:
pointer_to_binary_function {}
pointer_to_binary_function(Result (*x)(Arg1, Arg2)): ptr(х) {}
Result operator(Arg1 x, Arg2 y) const {return ptr(x, y);}
};
template ‹class Arg1, class Arg2, class Result›
pointer_to_binary_function‹Arg1, Arg2, Result› ptr_fun(Result (*x)(Arg1, Arg2)) {
return pointer_to_binary_function‹Argl, Arg2, Result›(x);
}
Например, replace_if(v.begin, v.end, not1(bind2nd(ptr_fun(strcmp), "C")), "C++") заменяет все "С" на "C++" в последовательности v.
Поделиться:
Популярные книги
Sos! Мой босс кровосос!
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Я – Орк
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
Возвышение Меркурия. Книга 4
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 6
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник и новый Новосиб
7. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы Рода. Том 4
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Промышленникъ
3. Александр Агренев
Приключения:
исторические приключения
9.13
рейтинг книги
Адъютант
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Зауряд-врач
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Измена. Не прощу
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Я еще не князь. Книга XIV
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80