码迷,mamicode.com
首页 > 其他好文 > 详细

SGI STL functors(仿函数) 12

时间:2019-10-07 19:45:34      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:个数   自己的   大于   ati   stl   ica   name   second   tor   


函数对象,即”行为类似函数”的对象,重载function call运算子(operator ())。
技术图片
STL仿函数根据操作数个数划分,可分为一元和二元仿函数,按功能划分可分为算数运算、关系运算、逻辑运算三大类。
使用内建仿函数需包含<functional>头文件。

仿函数可配接的关键


为了拥有配接能力,需要依照规定定义自己的5个相应型别。仿函数的相应型别主要用来表现函数参数型别和传回值型别。
为了方便期间,<stl_function.h>定义了两个class,分别表示一元仿函数和二元仿函数(STL不支持三元仿函数),其中只有型别定义,没有成员函数和成员变量。任何仿函数只需要根据需求继承其中一个class即可拥有相应型别,也就自动拥有了配接能力。

unary_function

unary_function用来呈现一元仿函数的参数型别和返回值型别。

1
2
3
4
5
template <class _, class _Result>
struct unary_function {
typedef _Arg argument_type;
typedef _Result result_type;
};

binary_function

binary_function用来呈现二元函数的第一参数型别、第二参数型别、返回值型别。

1
2
3
4
5
6
template <class _Arg1, class _Arg2, class _Result>
struct binary_function {
typedef _Arg1 first_argument_type;
typedef _Arg2 second_argument_type;
typedef _Result result_type;
};

binder1st配接器用于将某个二元仿函数转化为一元仿函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class _Operation>
class binder1st
: public unary_function<typename _Operation::second_argument_type,
typename _Operation::result_type> {
protected:
_Operation op;
typename _Operation::first_argument_type value;
public:
binder1st(const _Operation& __x,
const typename _Operation::first_argument_type& __y)
: op(__x), value(__y) {}
typename _Operation::result_type
operator()(const typename _Operation::second_argument_type& __x) const {
return op(value, __x);
}
};

算数仿函数


STL内建算数仿函数支持加、减、乘、除、求余、否定运算。除了否定运算其它均为二元运算。

  • 加:plus<T>
  • 减:minus<T>
  • 乘:multiplies<T>
  • 除:divides<T>
  • 求余:modulus<T>
  • 否定:negate<T>

关系运算类仿函数


STL内建关系运算符仿函数支持等于、不等于、大于、大于等于、小于、小于等于六类。每一个都是二元源算。

  • 等于:equal_to<T>
  • 不等于:not_equal_to<T>
  • 大于:greater<T>
  • 大于等于:greater_equal<T>
  • 小于:less<T>
  • 小于等于:less_equal<T>

逻辑运算符仿函数


STL内建的逻辑运算符仿函数支持And、Or、Not三种,And和Or为二元运算符,Not为一元运算符。

  • And:logical_and<T>
  • Or:logical_or<T>
  • Not:logical_not<T>

功能极其简单的仿函数都是为了搭配STL算法。


原文:大专栏  SGI STL functors(仿函数) 12


SGI STL functors(仿函数) 12

标签:个数   自己的   大于   ati   stl   ica   name   second   tor   

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11631618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!