Функторы. Namespaces — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
Строка 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)).
  
<nowiki>stable_sort(p,qcomp_by_abs())
 
  
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);
 
   }
 
   }
};</nowiki>
+
};
 +
}
  
 
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>