C++ 仿函数(一)

目录

一、仿函数是什么?

二、仿函数的特点

1.仿函数在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值

2.仿函数超出普通函数的概念,可以有自己的状态

​编辑3.仿函数可以作为参数传递。

三、谓词

一元谓词示例:

二元谓词示例:

总结

一、仿函数是什么?

        仿函数也叫函数对象,是定义了一个含有operator()成员函数的对象,可以视为一个一般的函数,只不过这个函数功能是在一个类中的运算符operator()中实现,它将函数作为参数传递的方式来使用。

二、仿函数的特点

1.仿函数在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值

class MyAdd
{
public:
	int operator()(int v1, int v2)
	{
		return v1 + v2;
	}
};

//1.函数对象在使用时,可以像普通函数那样调用,可以有参数和返回值
void test01()
{
	MyAdd myAdd;
	cout << myAdd(1, 2) << endl;
}

 结果输出:3

2.仿函数超出普通函数的概念,可以有自己的状态

//2、函数对象可以有自己的状态
class MyPrint
{
public:
	MyPrint()
	{
		count = 0;
	}
	void operator()(string test)
	{
		cout << test << endl;
		count++; //统计使用次数
	}

	int count; //内部自己的状态
};
void test02()
{
	MyPrint myPrint;
	myPrint("hello world");
	myPrint("hello world");
	myPrint("hello world");
	cout << "myPrint调用次数为: " << myPrint.count << endl;
}

运行结果:


3.仿函数可以作为参数传递。

//3、函数对象可以作为参数传递
void doPrint(MyPrint& mp, string test)
{
	mp(test);
}

void test03()
{
	MyPrint myPrint;
	doPrint(myPrint, "Hello C++");
}

 运行结果:

优点:
        1.仿函数可有拥有自己的数据成员和成员变量,比一般函数灵活。
        2.仿函数比函数指针的执行速度快。
        3.仿函数可以作为模板参数使用,因为每个仿函数都拥有自己的类型。

缺点:
        1.需要单独实现一个类。
        2.定义形式比较复杂。

三、谓词

仿函数返回值类型是bool数据类型,称为谓词

如果operator接受一个参数,那么称为一元谓词;如果接受两个参数,那么称为二元谓词

一元谓词示例:

//1.一元谓词 参数中只有一个的谓词,称为一元谓词
struct GreaterFive {
	bool operator()(int val) {
		return val > 15;
	}
};

void test01() {

	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	//查找容器中有没有大于5的数字
	//GreateFive(),匿名函数对象
	vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
	if (it == v.end()) {
		cout << "没找到!" << endl;
	}
	else {
		cout << "找到:" << *it << endl;
	}

}

 因为我们设置的vector容器中的数是0-9,所以无法找到15,故输出“没找到”

二元谓词示例:

//二元谓词
class MyCompare
{
public:
	bool operator()(int num1, int num2)
	{
		return num1 > num2;
	}
};


void test02()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(5);
	v.push_back(7);
	v.push_back(9);

	//默认从小到大
	sort(v.begin(), v.end());
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	cout << "----------------------------" << endl;

	//使用函数对象改变算法策略,排序从大到小
	sort(v.begin(), v.end(), MyCompare());
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

运行结果:

 

总结

        本文让我们对仿函数有了初步的认识,知道了什么是仿函数,仿函数的优缺点还有什么是谓词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/20231.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Azure API 管理缺陷突出了 API 开发中的服务器端请求伪造风险

微软最近修补了其 Azure API 管理服务中的三个漏洞&#xff0c;其中两个漏洞启用了服务器端请求伪造 (SSRF) 攻击&#xff0c;这些攻击可能允许黑客访问内部 Azure 资产。 概念验证漏洞用于突出开发人员在尝试为自己的 API 和服务实施基于黑名单的限制时可能犯的常见错误。 W…

4月更新 | Visual Studio Code Python

我们很高兴地宣布2023年4月版 Visual Studio Code 的 Python 和 Jupyter 扩展现已推出&#xff01; 此版本包括以下改进&#xff1a; Data Wrangler 可供 Visual Studio Code Insiders 使用移动符号重构Create Environment 按钮嵌入依赖文件扩展作者的环境 APIPython 环境的内…

BTC交易费激增,LTC活跃地址数飙升! BRC-20爆火背后,区块链网络经历了什么?

BRC-20 代币和 Ordinals 协议的日益普及推动了对比特币区块空间的需求&#xff0c;比特币区块链的费用已飙升至两年来的高点。 BRC-20代币标准在 Ordinals 协议上运行。Ordinals 允许用户通过将对数字艺术的引用写入基于比特币的小型交易中&#xff0c;来将数据嵌入比特币区块…

MySQL体系架构

一、 MySQL体系架构 MySQL体系架构可分为物理架构和逻辑架构。 1、MySQL物理体系架构 1.1 配置文件 auto.cnf: 配置了MySQL Server的UUIDmy.cnf: MySQL的配置文件 1.2 其他重要文件 -basedirdir_name: MySQL安装的二进制文件目录-datadirdir_name: MySQL的数据目录和-pid-…

特征选择与特征提取

目录 一、 特征选择1、特征2、特征选择3、扩展——特征选择算法(有兴趣和精力可了解)拓展--完全搜索:拓展--启发式搜索:拓展--随机搜索:拓展--遗传算法: 二、 特征提取三、特征提取主要方法——PCA(主成分分析)1、PCA算法是如何实现的&#xff1f;PCA--零均值化&#xff08;中心…

抖音未来的发展趋势|成都欢蓬信息

抖音未来的发展趋势&#xff0c;近年来随着互联网技术的发展&#xff0c;小视频app也逐渐走入大家的日常生活中&#xff0c;闲着的时候打开手机抖音APP&#xff0c;就可以刷到世界各地人们分享的视频和直播&#xff0c;下面一起看看抖音未来的发展趋势 一、抖音的现状   据权…

某IC交易网 js逆向解析学习【2023/05/16】

文章目录 文章目录 文章目录前言网址目标参数确认加密点cookie解密第一步hex1算法解析rind和rnns完结撒花前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 如侵权,联系我…

springboot + vue3实现视频播放Demo

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

让Chat-GPT成为你的微信小助理

前言 最近公司裁员风波&#xff0c;很不幸成为了裁员名单中的一员&#xff1b;此时又恰逢一波AIGC浪潮&#xff0c;首当其冲的就是GPT这样的大语言模型的诞生&#xff0c;是整个AI领域的一个质的飞跃。正好在这样一个空挡期&#xff0c;我就基于Chat-GPT 做了一些深入的实践&a…

Cannot read properties of null (reading ‘content‘)报错解决

项目是用vue3webpack&#xff0c;始终启动不成功~ 一、问题报错 二、报错解决尝试总结 &#xff08;1&#xff09;首先尝试的是因为我近期在做vite3vue3的需求把node版本升到了 16.17.1 猜测是不是node版本影响的 node版本切了14.15.3&#xff0c;16.17.1&#xff0c;以及很…

Oracle EBS Interface/API(48)- AP发票取消API

快速参考 参考点内容功能导航N: AP->发票->录入->发票并发请求None基表AP.AP_INVOICES_ALLAPI参考下面介绍错误信息表None接口FormNone接口RequestDebug ProfileNone详细例子参考如下实例官方文档None数据验证包None用户界面 Path:AP->发票>录入>发票->活…

全网火爆,性能测试从0到1分析需求到实战详解,冲出高级测试岗...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、制定测试目的 …

国产ChatGPT命名图鉴

很久不见这般热闹的春天。 随着ChatGPT的威名席卷全球&#xff0c;大洋对岸的中国厂商也纷纷亮剑&#xff0c;各式本土大模型你方唱罢我登场&#xff0c;声势浩大的发布会排满日程表。 有趣的是&#xff0c;在这些大模型产品初入历史舞台之时&#xff0c;带给世人的第一印象其…

做SSM项目的步骤和优化

SSM框架整合 这里说的SSM整合&#xff0c;主要说的是Spring和mybatis之间的整合。因为spring和springMVC都是spring生态系统中的框架&#xff0c;所以spring和springMVC之间的整合是无缝的整合&#xff0c;即&#xff0c;我们在不知不觉中&#xff0c;其实spring和springMVC已…

git如何将本地分支推送到远程(远程上没有该分支)

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 12/05/2023 Details:文章目录 正文 或 背景7.如果远程新建了一个分支&#xff0c;本地没有该分支。8.如果本地新建了一个分支 branch_name&#xff0c;但是在远程没有。报错解决 参考打赏 正文 或 背景 本…

Python依据某一文件夹中大量文件的名称复制另一文件夹中的同名文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件的名称&#xff0c;从另一个文件夹中找到与这一文件夹中文件同名的文件&#xff0c;并将找到的同名文件复制到第三个文件夹中的方法。 首先&#xff0c;我们来明确一下本…

【Java】EasyExecl数据导入

【Java】EasyExecl数据导入 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助…

如何设计API返回码(错误码)?

一、前言 二、HTTP 状态码参考 三、参数约定 四、个性化 Message 五、返回信息的统一处理 一、前言 客户端请求 API&#xff0c;通常需要通过返回码来判断 API 返回的结果是否符合预期&#xff0c;以及该如何处理返回的内容等 相信很多同学都吃过返回码定义混乱的亏&…

聚观早报 |苹果头显得到Oculus创始人认可;AI加持Bing市场份额反降

今日要闻&#xff1a;苹果头显得到Oculus创始人认可&#xff1b;AI加持下Bing市场份额不增反降&#xff1b;AI歌手翻唱大火可能涉及多项侵权&#xff1b;小米辟谣武汉总部35岁以上员工只保留10%&#xff1b;特斯拉2023年度股东大会下周召开 苹果头显得到Oculus创始人认可 5 月…

商场地图怎么画最简单?商场导视图怎么做?

商场购物中心超大的经营规模能为广大顾客提供购物选择的同时&#xff0c;也面临着许多问题&#xff1a;购物体验差&#xff0c;顾客到店率低。以及数据缺失&#xff0c;无法为商家做营销决策提供依据等等&#xff0c;那么&#xff0c;如何快速提升商场店铺运营效果&#xff0c;…