Функторы. Namespaces

Материал из SEWiki
Версия от 13:38, 29 мая 2011; Ivan (обсуждение | вклад) (Новая страница: «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()(in…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>;