C++,stl,函数对象,谓词,内建函数对象

news2024/11/28 22:55:38

目录

1.函数对象使用

 2.谓词

1.一元谓词

2.二元谓词

3.内建函数对象

1.算术仿函数

2.关系仿函数 

3.逻辑仿函数


1.函数对象使用

#include<bits/stdc++.h>
using namespace std;

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

class print
{
public:
	void operator()(string s)
	{
		cout << s << endl;
	}
};

int main()
{
	add a;
	cout << a(5,6) << endl;
	
	print p;
	p("hello!!!!!");
	
	return 0;
}

 

 2.谓词

1.一元谓词

#include<bits/stdc++.h>
using namespace std;

class dayu5
{
public:
	bool operator()(int v)
	{
		return v > 5;
	}
};

int main()
{
	vector<int> v;
	v.push_back(7);
	v.push_back(9);
	v.push_back(5);
	v.push_back(100);
	v.push_back(3);
	
	//查找容器内有没有大于5的数
	//dayu5是匿名函数对象
	vector<int>::iterator it = find_if(v.begin(),v.end(),dayu5());
	//找到了返回迭代器位置,没找到时返回的是尾迭代器
	
	if(it != v.end()) cout << "找到了,开心。" << *it << endl; 
	
	return 0;
}

2.二元谓词

#include<bits/stdc++.h>
using namespace std;

class cmp
{
public:
	bool operator()(int v1,int v2)
	{
		return v1 > v2;
	}
};

int main()
{
	vector<int> v;
	v.push_back(7);
	v.push_back(9);
	v.push_back(5);
	v.push_back(100);
	v.push_back(3);
	
	sort(v.begin(),v.end());
	
	for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
	
	sort(v.begin(),v.end(),cmp());
	
	cout << "------------------" << endl;
	
	for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << ' ';
	}
	
	return 0;
}

3.内建函数对象

1.算术仿函数

#include<bits/stdc++.h>
using namespace std;

int main()
{
	//取反仿函数
	negate<int> n;
	
	cout << n(50) << endl;
	//对50取反
	
	plus<int> p;
	//加法仿函数,传int类型的数进去相加
	
	cout << p(33,23) << endl;
	return 0;
}

 

2.关系仿函数 

#include<bits/stdc++.h>
using namespace std;

int main()
{
	vector<int> v;
	v.push_back(7);
	v.push_back(9);
	v.push_back(5);
	v.push_back(100);
	v.push_back(3);
	
	sort(v.begin(),v.end());
	
	for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
	
	sort(v.begin(),v.end(),greater<int>());
	
	cout << "------------------" << endl;
	
	for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << ' ';
	}
	
	return 0;
}

 

3.逻辑仿函数

#include<bits/stdc++.h>
using namespace std;

int main()
{
	vector<bool> v;
	v.push_back(1);
	v.push_back(1);
	v.push_back(0);
	v.push_back(0);
	v.push_back(1);
	
	for(vector<bool>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
	
	//将容器v搬到容器v1并且用logical_not进行取反的操作
	vector<bool> v1;
	v1.resize(v.size());
	
	transform(v.begin(),v.end(),v1.begin(),logical_not<bool>());
	
	for(vector<bool>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
	
	return 0;
}

 

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

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

相关文章

origin技巧

origin技巧 1.去掉白边2.曲线平滑3.合并多层图例3.图例换方向 1.去掉白边 ctrlu 2.曲线平滑 3.合并多层图例 3.图例换方向 图例右键 “图例” 水平排布修改图例字&#xff1a;双击图例修改 https://blog.csdn.net/m0_47746156/article/details/121295151 https://blog.csdn.…

【网站项目】023实验室耗材管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

BUGKU-WEB GET

题目描述 没有提示&#xff0c;就一个get&#xff0c;启动场景看看&#xff1a; 解题思路 显然是PHP语言解读分析代码吧写出你的payload 相关工具 略 解题步骤 进入场景分析代码 $what$_GET[what]; echo $what; if($whatflag) echo flag{****};前两句&#xff1a;使用get…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例&#xff1a;构建简单的区块链3.1.3 拓展案例 1&#xff1a;验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2&#xff1a;监听和解析区块链事件代币合约示例&#xff08;Solidity…

HarmonyOS 通过getInspectorByKey获取指定元素高宽等属性

例如 这里 我们有这样一个组件 Entry Component struct Dom {build() {Column() {Row() {Circle({ width: 200, height: 200 }).fill(#20101010)}.id(ES)}.width(100%).height(100%)} }这里 我们就写了个很基本的组件结构 然后 我们写了个 Circle 组件 定义了宽高 然后 如果我…

消息中间件面试篇

目录 消息中间件 RabbitMQ 消息不丢失 生产者确认机制 消息持久化 交换机持久化 队列持久化 消息持久化 消费者确认 消息重复消费 出现的场景 解决方案 每条消息设置一个唯一的标识id 幂等方案&#xff1a;【 分布式锁、数据库锁&#xff08;悲观锁、乐观锁&#…

VMware虚拟机安装openEuler系统(二)(2024)

下面我们进行openEuler系统的一些简单配置。 1. 开启openEuler系统 在VMware Workstation Pro虚拟机软件中找到安装好的openEuler操作系统虚拟机并开启。 等待开启。 2. 安装配置 进入后选择第一个“Install openEuler 20.03-LTS”。 3. 选择系统语言 为虚拟机设置系统语言…

【lesson53】线程控制

文章目录 线程控制 线程控制 线程创建 代码&#xff1a; 运行代码&#xff1a; 强调一点&#xff0c;线程和进程不一样&#xff0c;进程有父进程的概念&#xff0c;但在线程组里面&#xff0c;所有的线程都是对等关系。 错误检查: 传统的一些函数是&#xff0c;成功返回0&…

【Java】零基础蓝桥杯算法学习——二分查找

算法模板一: // 数组arr的区间[0,left-1]满足arr[i]<k,[left,n-1]满足arr[i]>k;Scanner scan new Scanner(System.in);int[] arr {1,2,3,4,5};int left 0,right arr.length-1;int k scan.nextInt();while(left<right) {//leftright时退出循环int mid (leftrigh…

【Linux 02】权限基本概念

文章目录 &#x1f308; Ⅰ 权限概念&#x1f308; Ⅱ 权限管理1. 文件访问者分类 (角色)2. 文件类型和访问权限 (事物属性)3. 文件权限值表示方法 &#x1f308; Ⅲ 权限修改1. chmod 设置文件访问权限2. chown 修改文件拥有者3. chgrp 修改文件或目录的所属组 &#x1f308; …

【ArcGIS Pro二次开发】(79):符号系统_CIMUniqueValueRenderer

CIMUniqueValueRenderer是ArcGIS Pro SDK中的一个类&#xff0c;用于创建唯一值渲染器&#xff08;Unique Value Renderer&#xff09;。 在ArcGIS Pro中长这样&#xff1a; 通过对CIMUniqueValueRenderer的操作&#xff0c;可以对符号系统进行更改&#xff0c;实现很多功能。…

Matplotlib Figure与Axes速成:核心技能一网打尽

Matplotlib Figure与Axes速成&#xff1a;核心技能一网打尽 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333; 一、Figure&#xff08;图形&#xff09;&#x1f333;&#x1f341;1. 创建Figure&#x1f341;&#x1f341;2. 添加Axes&#…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求&#xff1a; 去年12月&#xff0c;我去了其他幼儿园参观&#xff0c;这是一个传统文化德育教育特色的学校&#xff0c;在“古典集市”展示活动中&#xff0c;小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

MyBatis中的XML实现和动态SQL实现

文章目录 一、XML实现1.1增1.2删1.3查1.4改 二、XML方式实现动态SQL2.1if标签2.2trim标签2.3where标签2.4set标签2.5foreach标签2.6include标签和sql标签 一、XML实现 先在新建的XML文件中写入如下内容&#xff1a; <?xml version"1.0" encoding"UTF-8&qu…

php基础学习之分支结构和循环结构(不细讲,来对比一下和两大常用高级编程语言(C++/Java)的细微区别以便记忆)

分支结构 常见分支结构 编程语言常见分支结构有&#xff1a; if语句if-else语句if-elseif-else语句switch语句 其中&#xff0c;除了if-elseif-else语句外&#xff0c;另外3中分支语句在php中和C/Java是一模一样的&#xff01; 而if-elseif-else的唯一不同点就在&#xff0c;【…

【Python网络编程之DHCP服务器】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python开发技术 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python网络编程之DHCP服务器 代码见资源&#xff0c;效果图如下一、实验要求二、协议原理2.1 D…

奇异递归模板模式应用-对象计数

需求&#xff1a;有时遇到某些类特征相似而又没有共同的父类&#xff0c;希望能够知道这些类的创建数量之和。 思路&#xff1a;将这些类继承自同一个计数类&#xff0c;共享计数变量s_createCount信息&#xff0c;实现如下&#xff1a; class Counter { public:Counter() {s_…

Linux操作系统基础(十五):Shell编程

文章目录 Shell编程 一、什么是Shell 1、简介 2、Shell解释器 二、快速入门 1、编写Shell脚本 2、执行Shell脚本 Shell编程 一、什么是Shell 1、简介 Shell 是一个用 C 语言编写的程序&#xff0c; 通过 Shell 用户可以访问操作系统内核服务。 它类似于 DOS 下的 co…

【实战】一、Jest 前端自动化测试框架基础入门(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…

【python】object() takes no parameters报错原因

__init__ 你以为写对了&#xff0c;其实错了&#xff0c;因为是左右都是2个下划线。是左边两个&#xff01;&#xff01;右边也是两个&#xff01;&#xff01;&#xff01;不是合计2个&#xff01;&#xff01;&#xff01;