Функторы. Namespaces — различия между версиями
Ivan (обсуждение | вклад) |
Ivan (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
find_if (p, q, Func) | find_if (p, q, Func) | ||
− | struct Divby7 | + | struct Divby7 |
− | { | + | { |
bool operator()(int i)const | bool operator()(int i)const | ||
{ | { | ||
return i%7==0; | return i%7==0; | ||
} | } | ||
− | }; | + | }; |
− | struct Divby | + | struct Divby |
− | { | + | { |
Divby(int k) : k(k){} | Divby(int k) : k(k){} | ||
bool operator()(int i) const | bool operator()(int i) const | ||
Строка 17: | Строка 17: | ||
} | } | ||
const int k; | const int k; | ||
− | }; | + | }; |
Можно писать Find_if(p,q,Divby(5)). | Можно писать Find_if(p,q,Divby(5)). | ||
− | |||
− | structcomp_by_abs | + | stable_sort(p,qcomp_by_abs()) |
− | { | + | |
+ | structcomp_by_abs | ||
+ | { | ||
bool operator()(int a, int b)const | bool operator()(int a, int b)const | ||
{ | { | ||
return abs(a)<abs(b); | return abs(a)<abs(b); | ||
} | } | ||
− | }; | + | }; |
+ | } | ||
Divby - унарный предикат. | Divby - унарный предикат. | ||
Строка 36: | Строка 38: | ||
transform(p,q,out, add(7)); | transform(p,q,out, add(7)); | ||
− | struct add | + | struct add |
− | { | + | { |
add(int k): k(k){} | add(int k): k(k){} | ||
int operator()(int a)const | int operator()(int a)const | ||
Строка 43: | Строка 45: | ||
return a+7; | return a+7; | ||
} | } | ||
− | }; | + | }; |
Стандартные функторы: minus, plus, divides, modulus, mulutiplies, logical_and, logical_or, logical_not. | Стандартные функторы: minus, plus, divides, modulus, mulutiplies, logical_and, logical_or, logical_not. |
Версия 13:49, 29 мая 2011
find_if (p, q, Func)
struct Divby7 { bool operator()(int i)const { return i%7==0; } };
struct Divby { Divby(int k) : k(k){} bool operator()(int i) const { return i%k==0; } const int k; };
Можно писать Find_if(p,q,Divby(5)).
stable_sort(p,qcomp_by_abs())
structcomp_by_abs { bool operator()(int a, int b)const { return abs(a)<abs(b); } }; }
Divby - унарный предикат. comp_by_abs - бинарный предикат.
transform(p,q,out, add(7));
struct add { add(int k): k(k){} int operator()(int a)const { return a+7; } };
Стандартные функторы: minus, plus, divides, modulus, mulutiplies, logical_and, logical_or, logical_not. Бинарные предикаты(шаблонные) less, greater, less_equal, greater_equal, not_equal_to, equal_to.
find_if(p,q,bind1st(not_equal_to<int>(),7));
bind2nd
find_if(p,q,bind2nd(greater<int>(),7)) -- первый больший 7.
Кроме bind1st, bind2nd есть еще not1, not2.
struct Divby : unary_function<bool, int> { } если хоти чтобы с этим работали bind1st, bind2nd, not1, not2
Аналогично struct comp_by_abs::binary_function<bool, int, int>;
mem_fun mem_fun_ref ptr_fun for_each(p,q, mem_fun_ref(vector<int>::clear))
mem_fun - для указателей mem_fun_ref - для ссылок ptr_fun - для любой функции
Можно not1(ptr_fun(is_add()))
Библиотека boost::bind boost::bind(vector<int>::resize,_1, 100,3);
<nowiki>Вставляйте сюда неотформатированный текст.</nowiki>