谓词的介绍与基本使用

news2024/11/17 11:27:22

🚨谓词

🚦概念

1.返回类型为bool的仿函数
2.接受一个参数—一元谓词
接受一个参数—二元谓词

🚀1.一元谓词

⛽使用方法

因为返回值为bool类型,所以经常会将他使用成判断关系的函数
我们使用find_if()对谓词进行讲解,我们先要知道find_if()的代码

Pred—仿函数

template <class _InIt, class _Pr>
_NODISCARD _CONSTEXPR20 _InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred) { // find first satisfying _Pred
    _Adl_verify_range(_First, _Last);
    auto _UFirst      = _Get_unwrapped(_First);
    const auto _ULast = _Get_unwrapped(_Last);
    for (; _UFirst != _ULast; ++_UFirst) {
        if (_Pred(*_UFirst))//对这个指针进行解引用然后传入仿函数进行判断真假
        //所以只传进去了一个值,而判断关系需要两个值,那么另一个只就是自己给定的了
         {
            break;
        }
    }

    _Seek_wrapped(_First, _UFirst);
    return _First;
}
#include<iostream>
using namespace std;
#include<vector>
class Com
{
public:
	bool operator()(int v)//我们这里为什么只传过来了一个数字呢???
	{
		return v > 2;
	}
};
void test()
{
	vector<int>v;
	for (int i = 0; i < 10; i++) v.push_back(i);

	//Com()---匿名对象
	vector<int>::iterator  it=find_if(v.begin(), v.end(), Com());//使用仿函数实现
	if (it != v.end()) cout << "find  " <<*it<< endl;
	else cout << "not find" << endl;

	vector<int>::iterator its = find_if(v.begin(), v.end(), com);
	if (its != v.end()) cout << "find  " << *its << endl;
	else cout << "not find" << endl;

}
🪂函数实现讲解:

1.从起始迭代器开始一直到终止迭代器结束,将每一个数字带入函数中,返回bool类型,只有真才会成为迭代器最终的值否则直到最后的迭代器才会停止,所以判断的条件是将it与v.end()进行比较
2.我们这里使用了两种实现的方式,第一种是使用仿函数的形式,传入的是匿名对象第二种使用的是普通函数的形式,传入的是函数名

🚀2.二元谓词

在我们介绍二元谓词实现之前,需要先介绍一个函数sort函数(位于algorithm头文件中)

template <class _RanIt>
_CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last) { // order [_First, _Last)
    _STD sort(_First, _Last, less<>{});//我们能看到这里是less,默认就是小到大排序
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void print(vector<int> v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) cout << *it << " ";
	cout << endl;
}
class Com
{
public:
	bool operator()(int v1, int v2)
	{
		return v1 > v2;
	}
};
bool com(int v1, int v2)
{
	return v1 > v2;
}
void test()
{
	vector<int> v;
	v.push_back(2);
	v.push_back(12);
	v.push_back(41);
	v.push_back(25);
	v.push_back(45);
	v.push_back(24);
	print(v);

	sort(v.begin(), v.end());//默认是小到大排序
	print(v);

	sort(v.begin(), v.end(), Com());//仿函数
	print(v);

	cout << "--------------------" << endl;

	sort(v.begin(), v.end());//默认是小到大排序
	print(v);

	sort(v.begin(), v.end(), com);
	print(v);
}

排序函数自定义规则输出

🪂函数实现讲解:

我们的sort进行排序,排序就是比较,自然需要两个参数,所以传参就是两个,返回依旧是bool类型

总结:对于谓次我们需要紧紧把握住,因为后面都是他,离不开他了已经。

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

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

相关文章

HBase 2.3.7中snappy压缩配置

本文将介绍如何在HBase 2.3.7中配置snappy压缩。snappy是一种快速的数据压缩和解压缩算法&#xff0c;可以提高HBase的存储空间利用率和读写性能。本文将使用HBase 2.3.7版本&#xff0c;运行在三个Ubuntu系统的虚拟机中&#xff0c;分别作为master和slave节点。 主要步骤如下…

【SpringBoot】SpringBoot Starter 作用及原理

文章目录 前言一、什么是 Starter二、Starter 的作用三、spring 整合组件四、spring-boot 整合组件五、Starter 原理 前言 有没有在入行后直接基于 SpringBoot 开发项目&#xff0c;没有 spring、servlet 开发经历的? 有没有用 SpringBoot 开发项目&#xff0c;但是第一次听…

服务注册中心Eureka

服务注册中心Eureka Eureka介绍Eureka 环境搭建Eureka 集群配置Eureka 的自我保护模式Eureka 架构图 Eureka介绍 在微服务架构中&#xff0c;有着许许多多的微服务&#xff0c;微服务之间需要彼此进行远程调用&#xff0c;需要知道彼此的地址&#xff0c;通过人工的方式去管理…

C++算法:加权连通图的最小生成树(Prim)

文章目录 前言一、Prim算法原理二、算法实现1、生成图2、Prim 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 在前文加权连通图的最小生成树(Kruskal)中已经用以边找点的方式实现最小生成树的生成。Prim算法也是一种常用的最小生成树算法&#xff0c;和Kruskal不…

python 妙笔生花

1.学习编程好处 最主要的好处就是,思考问题的方式变得更加具有逻辑性。 日常我们敲代码时,需要思考每一行的代码执行效果,它就需要认真设计每行代码可用性。如果在设计上发生错误,在代码执行时就会报错。还能做到 触类旁通。 古语有云: 有道无术,术可求,有术无道,止于术…

armbian可视化查看系统的使用情况

文章目录 armbian查看系统的使用情况在终端可视化查看方式htop简介htop安装和使用的步骤 在浏览器可视化查看方式 armbian查看系统的使用情况 在终端可视化查看方式 htop简介 htop’是一款任务管理器和系统监视工具&#xff0c;可在Armbian Linux中使用。它提供了比默认任务…

Python使用多线程操作tif影像和HBase数据库

本文介绍使用Python的多线程技术&#xff0c;提高happybase模块和gdal模块的效率&#xff0c;从tif格式的影像文件中读取数据&#xff0c;并将其存储到HBase数据库中。主要步骤包括&#xff1a; 准备工作&#xff1a;安装Python环境&#xff0c;安装happybase模块和gdal模块&a…

windows安装jdk1.8

1.下载jdk8 https://www.oracle.com/java/technologies/downloads/#java8-windows 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/1qtVZ3Rsa1_n9XsFcXj07rA 提取码: yhwc 2.双击以后进行JDK的安装 操作前先在D盘保存java文件夹&#xff0c;里面新建jdk1.8.0_241文件…

AntDB 替换某省电信大数据平台的案例分享

亚信自研分布式数据库AntDB落地某省电信的案例分享 整体介绍 某省电信大数据分析平台&#xff0c;需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计&#xff0c;每次分析的数据量最高达到5亿级别&#xff0c;同时需要向其它厂商开放这种实时的数据分析能力&…

Java-API简析_java.util.Currency类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131255544 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

对象实例化空指针处理

1 问题 如何解决对象实例化空指针异常&#xff1f; 2 方法 首先创建一个package包&#xff0c;将其Menu类及相关代码放入其中&#xff0c;并在该package包下创建另一个类MenuItem&#xff0c;然后通过构造函数&#xff0c;写入需要运行的对象信息&#xff0c;最后在Menu类中用n…

leetcode 151. 反转字符串中的单词

2023.6.14 这道题全面考察了字符串的一些操作&#xff0c;这里我的思路是&#xff1a; 先对字符串进行空格去除操作&#xff0c;这里要注意一个细节&#xff1a;先用for循环去除连续空格&#xff0c;再用if判断开头和结尾的空格。再对没有异常空格的s 做一个反转操作。再对每一…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议&#xff0c;了解了HTTPS的工作原理以及具体的工作流程&#xff0c;了解了HTTP协议和HTTPS协议之间的区别。…

SSM框架搭建

SSM环境搭建 1 IDE的话&#xff0c;我用的MyEcplise&#xff0c;如果用Ecplise的话&#xff0c;需要自行配置服务器。 首先&#xff0c;建一个Dynamic工程&#xff0c;需要注意的是一定要勾选上web.xml。 将Spring框架包、jstl包、standard包、common-logging包、aopallian…

系列十三、MongoDB聚合查询

一、概述 MongoDB聚合框架&#xff08;Aggregation Framework&#xff09;是一个计算框架&#xff0c;它可以&#xff1a; ①&#xff1a;作用在一个或者几个集合上; ②&#xff1a;对集合中的数据进行一系列的运算; ③&#xff1a;将这些数据转化为期望的形式; 从效果而言…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…

计算机网络管理 实验4(一) SNMP报文分析之验证SNMP协议的工作过程以及分析SNMP数据单元的格式

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

FPGA基础知识-门级建模

目录 学习目标 学习内容 1.门的类型 2.门延迟 学习时间 学习小结 学习目标 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor&#xff0c;bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 …

【论文解读系列】Blip-2:引导语言图像预训练具有冻结图像编码器和大型语言模型

Blip-2 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models BLIP-2&#xff1a;引导语言图像预训练具有冻结图像编码器和大型语言模型 (0) 总结&实测 总结&#xff1a;blip-2 最大的贡献在于&#xff0c;提出了…

跨境电商社交媒体:选择合适的平台

正如您在使用社交媒体的九种方法中了解到的那样&#xff0c;跨境电商优先考虑社交媒体营销可能会更有利可图。有数十个平台可供选择&#xff0c;每个平台都迎合了具有不同兴趣、特征和位置的独特受众。 那么您应该关注哪个社交媒体平台以及如何以最大效率工作&#xff1f; 目…