C++STL--谓词

在这里插入图片描述

谓词

① 可调用的表达式称为谓词,包括仿函数,自定义函数,lambda表达式。
② 接受一个参数的谓词,称为一元谓词。
③ 接受两个参数的谓词,称为二元谓词。
可调用的表达式:对于一个对象或者表达式,如果可以使用调用运算符(),就称它为可以调用的。

一元谓词

接受一个参数的谓词,称为一元谓词。

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

//输出容器的所有元素
template<typename T>
void Show(const T& v)
{
    for (const auto x : v)
        cout << x << " ";
    cout << endl;
}

//判断奇数的函数(一个参数,返回bool)
bool is_odd_int(int i) {
    return ((i % 2) != 0);
}

//判断奇数的仿函数
class Is_odd
{
public:
bool operator()(int x) const//只有一个参数
{
    return x % 2 != 0;
}
};

int main()
{
    vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};//使用vector向量
    cout << "v: ";  Show(v);

    auto res1 = find_if(v.begin(), v.end(), is_odd_int);//利用自定义的函数
    if (res1 != v.end())
        cout << "  找到了奇数" << *res1 << endl;

    //使用lambda表达式在向量v中查找
    auto res2 = find_if(v.begin(), v.end(), [](int i) { return ((i % 2) == 0); });
    if (res2 != v.end())
        cout << "  找到了偶数" << *res2 << endl;

    auto res3 = find_if(v.begin(), v.end(), Is_odd());
    if (res3 != v.end())
        cout << "  找到了偶数" << *res3 << endl;

    return 0;
}

二元谓词

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

//输出容器的所有元素
template<typename T>
void Show(const T& v)
{
    for (const auto x : v)
        cout << x << " ";
    cout << endl;
}

bool Greater(int x, int y)//自定义函数
{
    return x > y;
}

class CGreater //自定义仿函数
{
public:
bool operator()(int x, int y)//重载()
{
    return x > y;
}
};

int main()
{
    vector<int> v1{3, 1, 5, 9, 7, 6, 4, 5, 10, 23, 12, 8};
    vector<int> v2;
    cout << "源数据:";  Show(v1);

    v2 = v1;
    sort(v2.begin(),v2.end());//默认为升序
    cout << "默认排序:";  Show(v2);

    v2 = v1;//重新赋值
    sort(v2.begin(), v2.end(), greater<int>());//降序排序,greater是STL内置仿函数,是二元谓词
    cout << "降序排序(STL仿函数):";  Show(v2);

    v2 = v1;//重新赋值
    sort(v2.begin(), v2.end(), [](int x, int y){return x>y;});//降序排序,利用lambda表达式
    cout << "降序排序(lambda):";  Show(v2);

    v2 = v1;//重新赋值
    sort(v2.begin(),v2.end(),Greater);//利用自定义函数进行降序排序
    cout << "降序排序(自定义函数):";  Show(v2);

    v2 = v1;//重新赋值
    sort(v2.begin(), v2.end(), CGreater());//利用自定义仿函数进行降序排序
    cout << "降序排序(自定义仿函数):";  Show(v2);

    return 0;
}

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

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

相关文章

java混淆的重要性分析

Java代码混淆是一种常用的安全技术&#xff0c;它通过对Java代码进行变换和重命名&#xff0c;使得源代码变得难以理解和逆向工程&#xff0c;从而增强代码的安全性。以下是对Java混淆重要性的分析&#xff1a; 保护知识产权&#xff1a;Java混淆可以防止恶意用户或竞争对手轻易…

macos 查看 远程服务器是否开放某个端口

想要使用mac查看远程服务器某个端口是否开发&#xff0c;可通过 nc 命令&#xff0c;如下&#xff1a; nc -zv <服务器IP> <端口号>如果该端口开发&#xff0c;结果为&#xff1a;succeeded! Connection to <服务器IP> port <端口号> [类型] succeed…

密码学 | 椭圆曲线 ECC 密码学入门(二)

目录 4 椭圆曲线&#xff1a;更好的陷门函数 5 奇异的对称性 6 让我们变得奇特 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1a;本文属搬运博客&#xff0c;自己留着学习。如果你和我一样…

leetcode 1702

leetcode 1702 题目 例子 代码思路 class Solution { public:string maximumBinaryString(string binary) {int n binary.size();int i binary.find(0);if(i string::npos){return binary;}int zeros count(binary.begin(), binary.end(), 0);string s(n, 1);s[izeros-1]…

Python爬虫怎么挣钱?6个Python爬虫赚钱方式,搞搞副业不是问题

1.最典型的就是找爬虫外包活儿 网络爬虫最通常的的挣钱方式通过外包网站&#xff0c;做中小规模的爬虫项目&#xff0c;向甲方提供数据抓取&#xff0c;数据结构化&#xff0c;数据清洗等服务。新入行的程序员大多都会先尝试这个方向&#xff0c;直接靠技术手段挣钱&#xff0…

数据结构复习指导之绪论(算法的概念以及效率的度量)

文章目录 绪论&#xff1a; 2.算法和算法评价 知识总览 2.1算法的基本概念 知识点回顾与重要考点 2.2算法效率的度量 知识总览 1.时间复杂度 2.空间复杂度 知识点回顾与重要考点 归纳总结 绪论&#xff1a; 2.算法和算法评价 知识总览 2.1算法的基本概念 算法( Al…

一辆汽车的节拍时间是怎样的?

节拍时间&#xff0c;又称 takt time&#xff0c;是德语中“节奏”的意思。在汽车制造业中&#xff0c;它指的是按照客户需求和生产计划&#xff0c;生产一辆汽车所需的时间。这个时间是固定的&#xff0c;它决定了生产线上每个工序的操作速度和节奏&#xff0c;是生产线上所有…

一题多解之数塔问题

递归实现:记忆化深度遍历 #include <iostream> #include <algorithm> #include <string> using namespace std; int num[1000][1000],n;//递归实现:记忆化深度遍历 int dfs(int x,int y){int sum0;//记录最大情况if(x>n||y>x) return sum;//实现每次都…

功能测试_验证标题长度合法性_边界值法

验证标题长度合法性&#xff08;标题长度大于0&#xff0c;小于等于30个字符&#xff09; 开内闭外&#xff0c;保留1和31

水电智能远程抄表系统

水电智能远程抄表系统是一种应用先进技术实现水电抄表的智能化管理系统&#xff0c;通过远程抄表、数据传输和智能分析&#xff0c;实现了对水电使用情况的实时监测和管理。本文将从系统特点、构成以及带来的效益三个方面展开介绍。 系统特点 1.远程抄表&#xff1a;系统能够…

cas学习4:自定义登出页面

接上一章学习 cas学习3&#xff1a;自定义登录页面_cas 个性化页面-CSDN博客 后我们要自定义登出页面&#xff0c;因为在配置完cas后各个子系统退出后的都是cas登出页面。不符合实际需要&#xff0c;所以我们要配置自己的登出页面 1.修改application.properties 增加&#…

有效确认手机号机主姓名,避免信息错误

在如今信息爆炸的时代&#xff0c;手机已经成为我们生活中必不可少的一部分。手机号码的重要性已经不仅仅是联系工具&#xff0c;更是诸多场景下的实名认证必备条件&#xff0c;如电商、游戏、直播、金融等。为了保证用户信息的准确性和安全性&#xff0c;挖数据平台上的手机号…

软件测试学习之MySQL学习笔记(完结)

目录 1. 数据库**** 1.1. 概念**** 1.2. 分类**** 1.2.1. 关系型数据库**** 1.2.1.1. SQL**** 1.2.2. 安装**** 1.2.2.1. Navicat**** 2. SQL语句**** 2.1. 常用数据类型**** 2.2. 数据库**** 2.3. 表**** 2.3.1. 字段约束**** 2.4. 数据**** 2.4.1. 增 insert**…

AI革新病历系统-能“读懂”病历,或将能“思考”

Artificial Intelligence&#xff08;人工智能&#xff09;&#xff0c;简称AI。它其实是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 电子病历系统拖慢了医疗工作流程&#xff0c;人工智能或许能改善这一困境。 一位名叫罗杰的…

典型神经网络模型—自编码器

文章目录 编码器的介绍基本原理编码器的分类 应用案例网络构建训练步骤&#xff1a;调优&#xff1a; 编码器的介绍 基本原理 在神经网络中&#xff0c;编码器&#xff08;Encoder&#xff09;是一种用于将输入数据转换为另一种形式的网络组件或模型部分。编码器的核心任务是…

Teachable Machine模型之TensorFlow使用篇

前言: 使用在teachable machine训练的h5格式模型 tensorflow使用篇 1. 使用teachable machine训练模型 地址: 传送门, 需要梯子翻一下 训练后, 导出的时候可以选择三种类型 导出模型文件 converted_keras.zip (py版) 解压后得到 2. py项目中使用模型 根据你当时使用tea…

FFmpeg: 简易ijkplayer播放器实现--06封装打开和关闭stream

文章目录 流程图stream openstream close 流程图 stream open 初始化SDL以允许⾳频输出&#xff1b;初始化帧Frame队列初始化包Packet队列初始化时钟Clock初始化音量创建解复用读取线程read_thread创建视频刷新线程video_refresh_thread int FFPlayer::stream_open(const cha…

Nginx转发请求错误

说明&#xff1a;记录一次使用Nginx转发请求的错误&#xff1b; 场景 公司内部有两台服务器都跑了后端项目&#xff0c;在使用Nginx做请求分发时&#xff0c;我发现其中有台服务器一直没有处理请求&#xff08;没打印相关的日志信息&#xff09;&#xff0c;于是我修改了下Ng…

企业如何使用SNP Glue将SAP与Snowflake集成?

SNP Glue是SNP的集成技术&#xff0c;适用于任何云平台。它最初是围绕SAP和Hadoop构建的&#xff0c;现在已经发展为一个集成平台&#xff0c;虽然它仍然非常专注SAP&#xff0c;但可以将几乎任何数据源与任何数据目标集成。 我们客户非常感兴趣的数据目标之一是Snowflake。Sno…

SpringBoot集成Skywalking链路追踪

安装skywaling 参考&#xff1a;Centos7搭建 SkyWalking 单机版-CSDN博客 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 1. 在IDEA中使用skywalking agent 在VM options中填入如下信息 -javaagent后是…