C++笔记15之函数对象
2012-07-16 12:15
176 查看
标准库定义的函数对象
标准库定义了一组算术,关系与逻辑函数对象类,标准库还定义了一组函数适配器,使我们能够特化或者扩展标准库所定义的以及自定义的函数对象类,这些标准库函数对象类型是在functional头文件中定义的。
算术函数对象类型:
Plus<Type> +
Minus<Type> -
Multiplies<Type> *
Divides<Type> /
Modulus<Type> %
Negate<Type> -//负号
关系函数对象类型:
Equal_to<Type> ==
Not_equal_to<Type> !=
Greater<Type> >
Greater_equal >=
Less<Type> <
Less_equal <=
逻辑函数对象类型:
Logical_add<Type> &&
Logical_or<Type> |
Logical_not<Type> !
每个函数对象类都是一个模板,我们需要为该模板提供一种类型,例如:
Plus<string>是将string加法操作符应用于string对象。而plus<int>是将int操作符应用到int对象。
Plus<int> intAdd;
Negate<int>intNegate;
Int sum=intAdd(10,20);//sum=30
Sum=intAdd(10,intNegate(10));//sum=0;
在算法中使用标准库函数对象:
Sort(svec.begin().svec.end(),greater<string>());
将按降序对vecrtor进行排序。
函数对象的函数适配器
(1) 绑定器(binder),是一种函数适配器,它将通过一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。
(2) 求反器(negator),是一种适配器。他将谓词函数对象的真值求反。
标准库定义了两个绑定器适配器:bind1st,bind2lnd,每个绑定器接受一个函数对象和一个值,正如你可能想到的,bind1st将给定的值绑定到二元函数对象的第一个实参,bind2nd将给定值绑定到二院函数对象的第二个实参。例如:
Count_if( vec.begin(), vec.end(), bind2nd( less_equal<int>(),10 ) );//小于等于10
传给count_if的第三个实参使用bind2nd函数适配器,该适配器返回一个函数对象,该对象用10作右操作数应用<=操作符。这个调用计算输入范围中小于或等于10的元素的个数。
标准库还定义了两个求反器:not1和not2你可能已经想到了,not1将一元函数对形象的真值求反,not2将二元函数队形的真值求反。
Count_if( vec.begin(), vec.end(), not2(bind2nd(less_equal<int>(), 10 )) );//结果不小于等于10
标准库定义了一组算术,关系与逻辑函数对象类,标准库还定义了一组函数适配器,使我们能够特化或者扩展标准库所定义的以及自定义的函数对象类,这些标准库函数对象类型是在functional头文件中定义的。
算术函数对象类型:
Plus<Type> +
Minus<Type> -
Multiplies<Type> *
Divides<Type> /
Modulus<Type> %
Negate<Type> -//负号
关系函数对象类型:
Equal_to<Type> ==
Not_equal_to<Type> !=
Greater<Type> >
Greater_equal >=
Less<Type> <
Less_equal <=
逻辑函数对象类型:
Logical_add<Type> &&
Logical_or<Type> |
Logical_not<Type> !
每个函数对象类都是一个模板,我们需要为该模板提供一种类型,例如:
Plus<string>是将string加法操作符应用于string对象。而plus<int>是将int操作符应用到int对象。
Plus<int> intAdd;
Negate<int>intNegate;
Int sum=intAdd(10,20);//sum=30
Sum=intAdd(10,intNegate(10));//sum=0;
在算法中使用标准库函数对象:
Sort(svec.begin().svec.end(),greater<string>());
将按降序对vecrtor进行排序。
函数对象的函数适配器
(1) 绑定器(binder),是一种函数适配器,它将通过一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。
(2) 求反器(negator),是一种适配器。他将谓词函数对象的真值求反。
标准库定义了两个绑定器适配器:bind1st,bind2lnd,每个绑定器接受一个函数对象和一个值,正如你可能想到的,bind1st将给定的值绑定到二元函数对象的第一个实参,bind2nd将给定值绑定到二院函数对象的第二个实参。例如:
Count_if( vec.begin(), vec.end(), bind2nd( less_equal<int>(),10 ) );//小于等于10
传给count_if的第三个实参使用bind2nd函数适配器,该适配器返回一个函数对象,该对象用10作右操作数应用<=操作符。这个调用计算输入范围中小于或等于10的元素的个数。
标准库还定义了两个求反器:not1和not2你可能已经想到了,not1将一元函数对形象的真值求反,not2将二元函数队形的真值求反。
Count_if( vec.begin(), vec.end(), not2(bind2nd(less_equal<int>(), 10 )) );//结果不小于等于10
相关文章推荐
- Javascript学习笔记-1(类型、变量、for语句、数组、字符串、原型对象、函数对象)
- [笔记] imooc《JavaScript深入浅出》对象与函数
- 好好学一遍JavaScript 笔记(九)——事件处理函数/监听函数/事件对象
- 好好学一遍JavaScript 笔记(九)――事件处理函数/监听函数/事件对象
- python学习笔记-(15)python中的循环对象
- c++笔记之函数与预处理、类与对象、继承与派生
- python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)
- boost库在工作(15)绑定器与函数对象之三
- C++ Primer 学习笔记:标准库定义的函数对象
- Javascript学习指南(第2版)笔记(二) 对象、正则表达式、函数
- swift语言的学习笔记四(类对象,函数)
- 初学Python的学习笔记7----偏函数、模块、重点是面向对象
- OpenCV自学笔记15. waitKey() 函数的作用
- 前端笔试题笔记:拍扁多维数组、提取URL中的参数变成对象、string的trim()函数、判断Email地址、16进制颜色转rgb
- 好好学一遍JavaScript 笔记(九)——事件处理函数/监听函数/事件对象
- 《Effective Java 第二版》学习笔记,第21条:用函数对象表示策略
- 【学习笔记15】java面向对象-匿名内部类
- js面向对象学习笔记之七(函数 与 基础控制结构)
- 【学习笔记六】 - js中 创建对象的模式与继承 及 js中实现块级作用域和函数私有变量 《js高程》6-7笔记
- python学习笔记-(16)python中的函数对象