STL 学习笔记 之 函数对象

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

C++ STL,三大核心组件:Containers, Iterators以及Algorithms,即容器,迭代器和算法。另外还一种重要组件,即函数对象(FunctionObject r)。函数对象又称为仿函数(functor)。函数对象其实就是一个行为类似函数的“东西”,它可以没有参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。

在C++程序设计中,任何普通函数和任何重载了函数调用运算符“()”的类的实例都是函数对象,都可以作为参数传递给STL算法。

例如 accumulate()算法

template<class InputIterator, class Type, class BinaryFunction> Type accumulate(InputIterator first, InputIterator last, Type val, BinaryFunctionbinaryOp);

//定义一个普通函数作为函数对象传递给算法accumulate(),进行累积运算

int mult(int x, int y)  { return x * y; };       

 accumulate(a, a + N, 1, mult//全局普通函数 mult作为函数对象

如果通过类来定义函数对象:

class MultClass {

public:

       int operator() (int x, int y) const  { returnx * y; }  //必须重载operator()函数

};

 

int main() {     //测试函数

       inta[] = { 1, 2, 3, 4, 5 };

       constint N = sizeof(a) / sizeof(int);  //求a的元素个数

       cout<< "数组a的元素乘积= "

       <<accumulate(a, a + N, 1, MultClass()) //调用默认构造函数生成临时匿名对象

              <<endl;

       return0;

}

除了通过自定义函数对象的两种方法外,STL也预定义了若干个函数对象

 

仿  函  数 名 称

类型

结果描述

算术类

函数对象

加法:plus<T>()

二元函数

arg1 + arg2

减法:minus<T>()

二元函数

arg1 - arg2

乘法:multiples<T>()

二元函数

arg1 * arg2

除法:divides<T>()

二元函数

arg1 / arg2

模取:modules<T>()

二元函数

arg1 % arg2

否定:negate<T>()

一元函数

-arg

关系运算类

函数对象

等同:equal_to<T>()

二元函数

arg1 == arg2

不等于:not_equal_to<T>()

二元函数

arg1  !=  arg2

大于:greater<T>()

二元函数

arg1 > arg2

大于等于:greater_equal<T>()

二元函数

arg1 >= arg2

小于:less<T>()

二元函数

arg1 < arg2

小于等于:less_equal<T>()

二元函数

arg1 <= arg2

逻辑运算类

函数对象

与:logical_and<T>()

二元函数

arg1 && arg2

或:logical_or<T>()

二元函数

arg1 || arg2

非: logical_not<T>()

二元函数

!arg1


 //在下面的语句中将标准二元函数对象multiplies<int>()传递给通用算法

       cout << "数组a的元素乘积= "       << accumulate(a, a + N, 1, multiplies<int>())<< endl;


sort(a.begin(), a.end(), greater<int>());  //降序排列
函数对象PPT 讲解函数对象 立即下载

相关推荐

STL中的 函数对象

1、函数对象 2、谓词 3、内建函数对象

qq_24472227的博客 1071

STL 函数对象

STL函数对象使用 //函数对象 /* 函数对象就是一个行为类似函数对象,为了能够行为类似函数,所以在类中必须自定义 函数调用运算子() 函数指针不够灵活 无法满足STL的抽象性要求 */ /* unary_function STL规定每一个一元函数都必须继它 它内部只模板化了参数与返回值 binary_function 呈现二元函数的两个参数与返回值 用户可以继承它 binder1

张驴儿的博客 538

C++ 排序函数sort使用

1.对int数组排序 sort(a,a+a.size()); 2.对vector排序 sort(A.begin(),A.end()); 2.对对vector降序排列 sort(A.begin(),A.end(),greater<int>());//降序排列 sort(A.rbegin(),A.rend());

m0_46471042的博客 512

排序笔记

sort函数的排序: #include <iostream> #include <algorithm> #include <string> #include <set> #include <cmath> #include <sstream> #include <vector> #include <que...

lkw_7213的博客 274

STL学习笔记--函数对象

STL学习笔记的一部分,主要用于个人记忆和复习,在代码和编辑习惯上也倾向于本人特点,主要专注于能读性和简便性。

VaIOReTto1的博客 165

C++ Primer Plus学习笔记STL函数对象

C++ Primer Plus学习笔记STL函数对象 一,什么是函数对象 很多STL算法都使用函数对象(也叫函数符)。函数符是可以以函数方式与()结合使用的任意对象。 例如:for_each(v.begin(),v.end(),Display) 二,函数符的概念 1,生成器,不用参数就可以调用的函数符 2,一元函数,是用一个参数可以调用的函数符 3,二元函数,是用两个参数可以调

奋起的Coder。。。 1466

C++学习笔记——STL函数对象

C++学习:STL中的仿函数

米兰的小铁匠 218

cpp学习笔记STL函数对象

cpp

ohhjack的博客 505

STL学习笔记(12)函数对象

函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。 注意 1.函数对象(仿函数)是一个类,不是一个函数。 2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。 函数对象分类: 假定某个类有一个重载的 operator(),而且重载的 operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor)

轻舞飞扬 198

stl学习笔记2(容器,函数对象

3 组件二:容器你可以生成STL容器,用来存放对象或者指向对象的指针。 class TMyClass;typedef list TMyClassList;     // 用于存放对象的list容器typedef list TMyClassPtrList; // 用于存放对象指针的list容器 如果容器是保存的对象,则在容器析构的时候会自动清理这些对象。但,如果它保存的是对象

denny的专栏 1665

C++ STL 学习笔记 函数对象

函数对象c++中函数名后的()称为函数调用运算符。函数调用运算符也可以重载,如果某个类重载了函数调用运算符,则该类的实例就是一个函数对象函数对象本身并不是很有用,但他们使得算法操作的参数化策略成为可能,使通用性算法变得更加通用(让函数作为参数还可以通过函数指针)实例class Add { double operator()(double x,double y) { return x+y;

cs_wangshuo的博客 372

C++STL标准库学习笔记(十一)函数对象

在这一篇文章中,我们主要对STL中的函数对象进行简单的介绍。

AwakeFantasy的博客 638

C++学习笔记(12):STL函数对象

文章目录一、函数对象1.1 函数对象的概念1.2 函数对象使用二、谓词2.1 谓词概念2.2 一元谓词2.3 二元谓词三、内建函数对象3.1内建函数对象意义3.2 算术仿函数 一、函数对象 1.1 函数对象的概念 1.2 函数对象使用 二、谓词 2.1 谓词概念 2.2 一元谓词 2.3 二元谓词 三、内建函数对象 3.1内建函数对象意义 概念: 分类; 用法: 3.2 算术仿函数 功能描述: 仿函数原型: ...

Hankerchen的博客 234

STL学习笔记07-函数对象与谓词

简单介绍函数对象与谓词

BiBi_li的博客 124

学习笔记】C++高级程序设计:STL函数对象

函数对象 函数对象:若一个类重载了运算符“()”,则该类的对象就成为函数对象 Class CMyAverage{ //函数对象类 Public: Double operator()(inta1,int a2,int a3){ //重载圆括号运算符          Reurn (double)(a1+a2+a3)/3; } }; CMyAverage average;//函数对象

moweiyang0214的专栏 604

STL学习笔记》 -- 函数对象、谓词

一、函数对象概念 重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 二、函数对象的使用 特点: 函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值。 函数对象超出普通函数的概念,函数对象可以有自己的状态。 函数对象可以作为参数传递。 //1、函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值 class MyAdd { public :

ccr的博客 262

STL学习笔记(14)内建函数对象

STL内建函数对象 STL 内建了一些函数对象。分为:算数类函数对象,关系运算类函数对象,逻辑运算类仿函数。这些仿函数所产生的 对象,用法和一般函数完全相同,当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象,需 要引入头文件 #include。 6 个算数类函数对象,除了 negate 是一元运算,其他都是二元运算。 template<class T> T plus<T>//加法仿函数 template<class T> T minus<T>

轻舞飞扬 179

11、C++ STL- 函数对象 ----学习笔记

文章目录11、STL- 函数对象11 函数对象11.1 函数对象概念11.2 函数对象使用11.3、 谓词11.3.1 、谓词概念11.3.2 、一元谓词11.3.3 、二元谓词11.4、内建函数对象11.4.1 内建函数对象意义11.4.2、算术仿函数11.4.3、关系仿函数11.4.4、逻辑仿函数 11、STL- 函数对象 11 函数对象 11.1 函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是

qq_42847094的博客 118

《我的第一本c++书》学习笔记STL函数对象

函数只是表达一个运算过程,像沙漏,流过后不留下任何痕迹,如果遇到用一个函数统计容器所有Student对象的身高,就必须累加上次累加的结果。这时就必须用到函数对象函数对象:就是定义了函数调用操作符,即operator()的普通类的对象。 例如,可以定义一个函数对象类来实现比较两个数的大小 代码如下: // 3.cpp : 定义控制台应用程序的入口点。 // #include "stda

Yuippe的专栏 770
上一篇: STL学习笔记 迭代器
下一篇: STL学习笔记之 算法(构造堆等)
moonboat0331
博客等级 码龄18年 19粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值