函数对象分类
- 发生器:一种没有参数且返回一个任意类型值的函数对象,例如随机数发生器。
- 一元函数:一种只有一个任意类型的参数,且返回一个可能不同类型数值的函数对象。
- 二元函数:一种有两个任意类型的参数,且返回一个任意类型值的函数对象。
- 一元判定函数:返回bool型值的一元函数。
- 二元判定函数:返回bool型值的二元函数。
利用函数对象求向量各元素之和
对上述代码,需要注意:
- 必须重载operator()。
- 函数对象调用方式。直接采用构造函数形式调用,如本例而言for_each(v.begin(), v.end(), nSum())中的第三个参数nSum(),也就是说,对本例而言,STL知道nSum()对应着nSum类中重载的operator()函数,具体有几个参数呢?由于for_each函数一次只能迭代出一个整型数,因此STL知道每迭代一次整型数都要执行一次nSum中的operator(int)函数。
- nSum result用来接收for_each迭代函数对象的最终结果。
一元函数
STL中一元函数基类是一个模板类,原型如下
利用一元函数求向量之和
二元函数
STL中二元函数基类shiite一个模板类,原型如下。
它有三个模板参数,Arg1, Arg2是输入参数,Result是返回类型,且这三个参数的类型是任意的,因此它的动态特性非常强。
利用二元函数使学生成绩升序排列: