函数对象,即”行为类似函数”的对象,重载function call运算子(operator ())。
STL仿函数根据操作数个数划分,可分为一元和二元仿函数,按功能划分可分为算数运算、关系运算、逻辑运算三大类。
使用内建仿函数需包含
<functional>
头文件。
仿函数可配接的关键
为了拥有配接能力,需要依照规定定义自己的5个相应型别。仿函数的相应型别主要用来表现函数参数型别和传回值型别。
为了方便期间,
<stl_function.h>
定义了两个class,分别表示一元仿函数和二元仿函数(STL不支持三元仿函数),其中只有型别定义,没有成员函数和成员变量。任何仿函数只需要根据需求继承其中一个class即可拥有相应型别,也就自动拥有了配接能力。
unary_function
unary_function
用来呈现一元仿函数的参数型别和返回值型别。
12345 |
template <class _, class _Result>struct unary_function { typedef _Arg argument_type; typedef _Result result_type;}; |
binary_function
binary_function
用来呈现二元函数的第一参数型别、第二参数型别、返回值型别。
123456 |
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配接器用于将某个二元仿函数转化为一元仿函数
12345678910111213141516 |
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
原文地址:https://www.cnblogs.com/sanxiandoupi/p/11631618.html
时间: 2024-11-05 19:40:03