C++ 仿函数(二)

news2024/11/17 14:02:25

在上一篇里我们讲了仿函数是什么,以及一元谓词,二元谓词的概念

C++ 仿函数(一)_小梁今天敲代码了吗的博客-CSDN博客

这篇是讲“内建函数对象”主要包括:“算术仿函数”,“关系仿函数”,“逻辑仿函数”

目录

一.算术仿函数

示例:

二.关系仿函数 

示例:(举例为大于仿函数在排序中的使用)

 三.逻辑仿函数

示例:(逻辑非运算)

总结:这一篇的内建函数对象,主要是统一了平时人们在自己写一些函数时五花八门的写法,直接使用这些内建函数对象可以有效防止命名空间污染的问题。

一.算术仿函数

功能:实现四则运算

template<class T> T negate<T>        //取反仿函数
template<class T> T plus<T>          //加法仿函数
template<class T> T minus<T>         //减法仿函数
template<class T> T multiplies<T>    //乘法仿函数
template<class T> T divides<T>       //除法仿函数
template<class T> T modulus<T>       //取模仿函数

示例:

#include<iostream>
using namespace std;
#include<functional>

//negate
void test01()
{
	negate<int> n;
	cout << n(50) << endl;
}

//plus
void test02()
{
	plus<int> p;
	cout << p(10, 20) << endl;
}

void test03()
{
	minus<int> n;
	cout << n(20, 10) << endl;
}

void test04()
{
	multiplies<int> n;
	cout << n(20, 10) << endl;
}

void test05()
{
	divides<int> n;
	cout << n(20, 10) << endl;
}

void test06()
{
	modulus<int> n;
	cout << n(20, 10) << endl;
}

int main() {

	test01();
	test02();
	test03();
	test04();
	test05();
	test06();
	system("pause");

	return 0;
}

运行结果:

二.关系仿函数 

template<class T> bool equal_to<T>                //等于
template<class T> bool not_equal_to<T>            //不等于
template<class T> bool greater<T>                 //大于
template<class T> bool greater_equal<T>           //大于等于
template<class T> bool less<T>                    //小于
template<class T> bool less_equal<T>              //小于等于

示例:(举例为大于仿函数在排序中的使用)

#include<iostream>
using namespace std;
#include <functional>
#include <vector>
#include <algorithm>

class MyCompare
{
public:
	bool operator()(int v1, int v2)
	{
		return v1 > v2;
	}
};
void test01()
{
	vector<int> v;

	v.push_back(10);
	v.push_back(30);
	v.push_back(50);
	v.push_back(40);
	v.push_back(20);

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;

	//自己实现仿函数
	//sort(v.begin(), v.end(), MyCompare());
	//STL内建仿函数  大于仿函数
	sort(v.begin(), v.end(), greater<int>());

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

 三.逻辑仿函数

template<class T> bool logical_and<T>              //逻辑与
template<class T> bool logical_or<T>               //逻辑或
template<class T> bool logical_not<T>              //逻辑非

示例:(逻辑非运算)

transform:transform() 可以将函数应用到序列的元素上,并将这个函数返回的值保存到另一个序列中,它返回的迭代器指向输出序列所保存的最后一个元素的下一个位置。

在使用tranform函数之前,需要先给将要保存值的序列申请空间

#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
void test01()
{
	vector<bool> v;
	v.push_back(true);
	v.push_back(false);
	v.push_back(true);
	v.push_back(false);

	for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	//逻辑非  将v容器搬运到v2中,并执行逻辑非运算
	vector<bool> v2;
	v2.resize(v.size());
	transform(v.begin(), v.end(), v2.begin(), logical_not<bool>());
	for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

 

总结:这一篇的内建函数对象,主要是统一了平时人们在自己写一些函数时五花八门的写法,直接使用这些内建函数对象可以有效防止命名空间污染的问题。

总之有以下几个有点:

        1.防止我们自己写代码时出错

        2.防止多人合作写代码时出现命名空间污染问题

        3.尽可能少的去使用全局变量

        4.成员函数可以很自然的访问成员变量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6年自动化测试经验,终于进字节跳动了,年薪30w其实也并非遥不可及

一些碎碎念 什么都做了&#xff0c;和什么都没做其实是一样的&#xff0c;走出“瞎忙活”的安乐窝&#xff0c;才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没…

LC-1373. 二叉搜索子树的最大键值和(后序遍历)

1373. 二叉搜索子树的最大键值和 难度困难173 给你一棵以 root 为根的 二叉树 &#xff0c;请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下&#xff1a; 任意节点的左子树中的键值都 小于 此节点的键值。任意节点的右子树中的键值都 大于 此节点的键值。任…

IP协议详解之IP地址要领

整个的因特网就是一个单一的、抽象的网络。而IP地址就是给因特网上的每一个主机&#xff08;或路由器&#xff09;的每一个接口分配一个在全世界范围是唯一的32位的标识符。IP地址的结构使我们可以在因特网上很方便地进行寻址。但是&#xff0c;根据TCP/IP协议的规定的IP地址是…

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok

【Flutter 工程】002-代码生成&#xff1a;Freezed ——类似 Java 的 lombok 文章目录 【Flutter 工程】002-代码生成&#xff1a;Freezed ——类似 Java 的 lombok一、概述1、简介2、主要功能3、主页与使用前后比较主页使用前使用后 二、基本使用1、安装2、改造 main.dart3、创…

pygam第4课——颜色监测(迷宫小游戏)

前言&#xff1a;前三节课我们学习了&#xff0c;窗口的创建、图片的加载、常用鼠标事件的等。今天我们学一个颜色的监测&#xff0c;并自制一个迷宫小游戏。那我们一下来看看吧 前面的三节课在这里&#xff0c;大家记得关注收藏一下&#xff1a; 视频演示 1、界面搭建 背景图…

开发者关系工程师如何帮助开发者在Sui上构建

近期&#xff0c;我们与Sui开发者关系负责人Brian Hennessey-Hsien进行了对话&#xff0c;就Sui上的开源、去中心化和开发者成就等话题展开讨论。 日前&#xff0c;我们采访了Sui基金会的开发者关系负责人Brian Hennessey-Hsieh&#xff0c;共同探讨了其对于Web3中开发者发展历…

冷热温度正反向控制技术在换热器热疲劳试验中的应用

摘要&#xff1a;空调换热器需要进行可靠性试验以满足整机产品在不同环境下的寿命周期&#xff0c;温度交变试验是可靠性试验中是较为关键的一项。本文在现有PLC交变温度控制技术基础上&#xff0c;提出了一种模块式的改进解决方案&#xff0c;即增加了专用的高精度PID调节器分…

不入耳耳机的正确打开方式,韶音OpenFit诠释耳机的“舒适圈”

文 | 智能相对论 作者 | 佘凯文 总有人说&#xff0c;人们需要跳出舒适圈&#xff0c;逼着自己去不断挑战。也有人问&#xff0c;我满足现状&#xff0c;为什么要跳出舒适圈&#xff1f;说到底&#xff0c;两种说法都没有错&#xff0c;不过该不该走出舒适圈或许也得分“场合…

麻了,最好不要去外包,干了三年,废了一半......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【coding加油站】vue单页面图书管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

数据结构课程设计——运动会分数统计

运动会分数统计 数据结构课程设计任务书 学生姓名&#xff1a;xxx 专业班级&#xff1a;软件工程 指导教师&#xff1a; 工作单位&#xff1a; 题 目: 运动会分数统计 基础要求&#xff1a; 要求具有C语言的理论基础…

ProtoBuf安装及避坑指南

文章目录 安装前注意事项(避坑)ProtoBuf在Linux下的安装protoBuf 测试demo 安装前注意事项(避坑) 1.安装前&#xff0c;我们需要升级g&#xff0c;使用较新的g编译器。 2.在安装过程中&#xff0c;出现问题&#xff0c;可以选择安装其他版本&#xff0c;在加压文件下执行make …

NFTScan:05.15~05.21 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.05.15 ~ 2023.05.21 NFT Hot News&#xff1a;NFT 热点资讯 01/ DID 解决方案提供商 Lifeform 以 3 亿美元估值完成 IDG Capital 领投的 B 轮融资 5 月 15 日&#xff0c;去中心化…

Rocketmq常用使用场景

RocketMQ 是阿里开源的分布式消息中间件&#xff0c;跟其它中间件相比&#xff0c;RocketMQ 的特点是纯JAVA实现 基础概念 Producer&#xff1a; 消息生产者&#xff0c;负责产生消息&#xff0c;一般由业务系统负责产生消息 Producer Group&#xff1a; 消息生产者组&#xf…

ESP32CAM---利用Vscode阅读源码

前言 &#xff08;1&#xff09;首先&#xff0c;我在此吐槽一些&#xff0c;arduino平台的代码阅读功能&#xff0c;是真滴垃圾。气死我了。配置这玩意搞了半天&#xff0c;还没搞好。 &#xff08;2&#xff09;最后我决定使用Vscode阅读arduino的代码。arduino IDE负责编译程…

智能工厂已成为制造业数字化转型的重心

我国“十四五”规划纲要提出&#xff0c;要深入实施智能制造和绿色制造工程&#xff0c;发展服务型制造新模式&#xff0c;推动制造业高端化智能化绿色化。随着5G等新一代信息技术与制造业不断深度融合&#xff0c;制造业的智能化发展成为未来我国制造业转型升级的重要方向。《…

MyBatisPlus快速入门(一)MyBatisPlus简介、历史和优势

一、什么是 MyBatisPlus&#xff1f;二、MyBatisPlus 相关文档2.1 官网2.2 Github源码2.3 官方文档 三、MyBatisPlus 的历史四、MyBatisPlus 的特性和优势4.1 特性4.2 优势 五、如何学习 MyBatisPlus & 专栏计划 一、什么是 MyBatisPlus&#xff1f; MyBatisPlus&#xff…

MyBatis中使用第三方分页插件PageHelper完成分页功能

文章目录 一、前言二、基于插件拦截方式1、自定义插件2、使用第三方插件完成分页1、分页插件的配置2、分页插件的使用 一、前言 分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的&#xff0c;不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据…

2023年4月CSDN客服月报|解决3个重大问题和26个次要问题,采纳1个用户建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉报告》第19期&#xff0c;接下来就请大家一同回顾我们4月份解决的bug&#xff5e; 一、重大问题 1、【猿如意】ChitGPT近期老是提示“我回答不过来”的问题 反馈量&#xff1a;10 2、…

【星戈瑞】Sulfo-Cyanine7 maleimide磺化CY7标记马来酰亚胺

水溶性Cyanine7 mal是一种常用的细胞标记物&#xff0c;可以被用于细胞荧光成像等应用中。它的分子结构中含有Cyanine7和mal两部分&#xff0c;其中Cyanine7是一种红外荧光染料&#xff0c;可以发出红外光&#xff0c;而mal则是一种水溶性的化合物&#xff0c;可以使Cyanine7分…