Функторы. Namespaces
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>;