C++初学者指南-5.标准库(第一部分)--标准库最小/最大算法

C++初学者指南-5.标准库(第一部分)–标准库min/max算法

文章目录

  • C++初学者指南-5.标准库(第一部分)--标准库min/max算法
    • min
    • max
    • minmax
    • clamp (C++17)
    • min_element
    • max_element
    • minmax_element
    • 相关内容

C++标准库算法是一块新领域?⇒简短介绍

min

min(a, b) → a 如果 a < b则返回a,否则返回b
min(a, b, cmp(o,o)→bool) → 如果 cmp(a,b) 为真则返回a, 否则返回b
cppreference

int const a = 2;
int const b = 9;
int x = std::min(a,b);  // int x = 2
struct P { int q; char c; };
P pmin = std::min(P{1,'y'}, P{2,'x'}, [](P p1, P p2){ return p1.q < p2.q; });  // P pmin {1,'y'};

运行示例代码

min({v1,v2,v3,…}) → 求最小值 (C++11)
min({v1,v2,v3,…}, cmp(o,o)→bool) → 求最小值
第二个版本使用cmp来比较元素
当第一个版本使用 operatior < 来进行比较时,
所有输入列表{…}元素类型必须一致
cppreference

int const a = 2;
int const b = 9;
int x = std::min({3,4,b,3,a,8});  // int x = 2

运行示例代码

ranges::min(range) → 求最小值 (C++20)
ranges::min(range, cmp(o,o)→bool) → 求最小值
返回范围内最小元素的常量引用
第二个版本使用 cmp 来比较元素,而第一个版本使用 operator <
cppreference

std::vector<int> v {7,9,3,5,3,1,4,8};
auto x = std::ranges::min(v);  // int x = 1
struct P { int q; char c; };
std::vector<P> const w {P{3,'a'},P{1,'c'},P{2,'b'}};
auto pmin = std::ranges::min(w, [](P const& p1, P const& p2){ return p1.q < p2.q; });  // P pmin {1,'c'}

运行示例代码

max

max(a, b) → 如果 a < b为假则返回a,否则返回b
max(a, b, cmp(o,o)→bool) → 如果 cmp(a,b) 为假则返回a,否则返回b
cppreference

int const a = 2;
int const b = 9;
int x = std::max(a,b);  // int x = 9
struct P { int q; char c; };
P pmax = std::max(P{1,'y'}, P{2,'x'}, [](P p1, P p2){ return p1.q < p2.q; });  // P pmax {2,'x'};

运行示例代码

max({v1,v2,v3,…}) → 求最大值 (C++11)
max({v1,v2,v3,…}, cmp(o,o)→bool) → 求最大值
第二个版本使用 cmp 来比较元素
当第一个版本使用operator <来比较元素时:
所有输入列表{…}元素类型必须一致
cppreference

int const a = 2;
int const b = 9;
int x = std::max({3,4,b,3,a,8});  // int x = 9

运行示例代码

ranges::max(range) → 求最大值 (C++20)
ranges::max(range, cmp(o,o)→bool) → 求最大值
返回范围内最大元素的常量引用
第二个版本使用cmp用于比较元素,而第一个版本使用operator <
cppreference

std::vector<int> v {7,9,3,5,3,1,4,8};
auto x = std::ranges::max(v);  // int x = 9
struct P { int q; char c; };
std::vector<P> const w {P{1,'c'},P{3,'a'},P{2,'b'}};
auto pmax = std::ranges::max(w, [](P p1, P p2){ return p1.q < p2.q; });  // P pmax {3,'a'}

运行示例代码

minmax

minmax(a, b) → {最小值, 最大值}  (C++11)
minmax(a, b, cmp(o,o)→bool) → {最小值,最大值}
如果a的排序在b之前,比较函数/对象cmp(a,b)必须返回true
cppreference

int a = 2;
int b = 9;
auto p = std::minmax(a,b);  // std::pair<int,int> p {2,9}
auto min = p.first;  // int min = 2
auto max = p.second; // int max = 9
auto [lo,hi] = std::minmax(a,b);  // int lo = 2, hi = 9  C++17

运行示例代码

minmax({v1,v2,v3,…}) → {最小值,最大值}  (C++11)
minmax({v1,v2,v3,…}, cmp(o,o)→bool) → {最小值,最大值}
第二个版本使用 cmp 来比较元素,
当第一个版本使用 operator < 比较元素时,
所有输入列表{…}元素类型必须一致
cppreference

int const a = 2;
int const b = 9;
auto p = std::minmax({3,0,b,3,a,8});  // std::pair<int,int> p {0,9}
auto min = p.first;  // int min = 0
auto max = p.second; // int max = 9
auto [lo,hi] = std::minmax({3,0,b,3,a,8});  // int lo = 0, hi = 9  C++17

运行示例代码

ranges::minmax(range) → {最小值,最大值} (C++20)
ranges::minmax(range, cmp(o,o)→bool) → {最小值,最大值}
返回一对范围内的最小和最大元素的常量引用; 第2版使用cmp来比较元素,而第1版使用 operator <
cppreference

std::vector<int> v {7,9,3,5,3,1,4,8};
auto p = std::ranges::minmax(v);  // std::pair<int,int> p {1,9}
auto [min,max] = std::ranges::minmax(v);
struct P { int q; char c; };
std::vector<P> const w {P{3,'a'},P{2,'b'},P{1,'c'}};
auto [lo,hi] = std::ranges::minmax(w, [](P p1, P p2){ return p1.q < p2.q; });  // P lo {1,'c'}, hi {3,'a'}

运行示例代码

clamp (C++17)

clamp(value, lo, hi) → 返回限定值
clamp(value, lo, hi, cmp(o,o)→bool) → 返回限定值
限定值在lo和hi之间
第二个版本使用 cmp 来比较值,而不是用 operator <
cppreference

int a = std::clamp( 8,  1, 5);  // int a =  5
int b = std::clamp(-4,  1, 5);  // int b =  1
int c = std::clamp(-4, -2, 5);  // int c = -2

运行示例代码

min_element

在这里插入图片描述
第二个版本使用“compare”来比较元素,
而第一个版本使用 operator <
cppreference
在这里插入图片描述
运行示例代码

在这里插入图片描述
使用operator < 来比较元素;或者可以作为第二个参数传递自定义的函数对象 comp来比较元素
cppreference

std::vector<int> v {7,9,3,5,3,2,4,1,8,0};
auto i = std::ranges::min_element(v);
auto min = *i;  // int min = 0

运行示例代码

max_element

在这里插入图片描述

第二个版本使用“compare”来比较元素,
而第一个版本使用 operator <
cppreference
在这里插入图片描述
运行示例程序

在这里插入图片描述
使用operator < 来比较元素;或者可以作为第二个参数传递自定义的函数对象 comp来比较元素
cppreference

std::vector<int> v {7,9,3,5,3,2,4,1,8,0};
auto i = std::ranges::max_element(v);
auto max = *i;  // int max = 9

运行示例代码

minmax_element

在这里插入图片描述
返回一个指向输入范围中最小和最大元素的迭代器对std::pair;
第二个版本使用 comp 来比较元素,
而第一个版本使用 operator <
cppreference
在这里插入图片描述
运行示例代码

在这里插入图片描述
返回一个std::pair,其中包含输入范围中最小和最大元素的迭代器;
使用operator < 来比较元素;或者作为第二个参数传递一个自定义函数(对象)cmp
cppreference

std::vector<int> v {7,1,3,5,3,8,6,2,9,0};
auto [i,j] = std::ranges::minmax_element(v);
auto min = *i;  // int min = 0
auto max = *j;  // int max = 9

运行示例代码

相关内容

视频:最大最小算法 by Conor Hoekstra
标准算法概述
C++标准库算法介绍
标准序列容器(vector、deque、list、…)
标准关联容器(map、set、…)
标准序列视图
cppreference:算法库
cppreference:容器库
视频:什么是 C++ 标准库?
视频:一小时内掌握 105 个 STL 算法 (Jonathan Boccara,2018)
C++ 之旅:容器和算法
算法概述表:
在这里插入图片描述
附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

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

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

相关文章

Linux_实现UDP网络通信

目录 1、实现服务器的逻辑 1.1 socket 1.2 bind 1.3 recvfrom 1.4 sendto 1.5 服务器代码 2、实现客户端的逻辑 2.1 客户端代码 3、实现通信 结语 前言&#xff1a; 在Linux下&#xff0c;实现传输层协议为UDP的套接字进行网络通信&#xff0c;网络层协议为IPv4&am…

基于Fabric 的区块链测试方法调研与总结

Fabric概述 从应用层视角来看&#xff0c;Hyperledger Fabric为开发人员提供了CLI命令行终端、事件模块、客户端SDK、链码API等接口&#xff0c;为上层应用提供了身份管理、账本管理、交易管理、智能合约管理等区块链服务&#xff0c;具体如下&#xff1a; 身份管理&#xff…

百年传承,味在蒸面

2024年7月15日&#xff0c;西安工程大学赴陕西安康“筑梦乡村&#xff0c;携手同行”暑期社会实践团队前往陕西安康鼓楼西街对非遗美食马国庆蒸面进行实践活动。 早晨七点&#xff0c;实践团队在鼓楼西街路口整装集合前往马国庆蒸面&#xff0c;据实践团队前期资料收集了解到马…

k8s+containerd(kvm版)

k8s&#xff08;Kubernetes&#xff09;是由Gogle开源的容器编排引擎&#xff0c;可以用来管理容器化的应用程序和服务&#xff0c;k 高可用&#xff1a;系统在长时间内持续正常地运行&#xff0c;并不会因为某一个组件或者服务的故障而导致整个系统不可用可扩展性&#xff1a…

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示&#xff0c;显然这不安全&#xff0c;有的程序员离职了以后可能会做一些非法骚操作&#xff0c;所以我们最好要做一个加密&#xff0c;只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…

爬虫学习3:爬虫的深度爬取

爬虫的深度爬取和爬取视频的方式 深度爬取豆瓣读书 import time import fake_useragent import requests from lxml import etree head {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 …

陶德:边种田边写代码,3年300万行,一个人写出了“国产大满贯QT”

这是《开发者说》的第12期&#xff0c;本期我们邀请的开发者是陶德&#xff0c;从小在国企矿山里长大&#xff0c;计算机成绩是文科班里最差的一个&#xff0c;毕业两年找不到工作&#xff0c;睡过公园&#xff0c;讨过剩饭&#xff0c;用打魔兽世界的方式磨炼技术&#xff0c;…

.NET 8+Vue2 部署到Window Server

.NET 8Vue2 部署到Window Server 1 配置环境 1.1 下载安装.NET 8 SDK&#xff0c;下载时需注意目标服务器的系统类型&#xff08;64位 or 32位&#xff09; https://dotnet.microsoft.com/zh-cn/download 1.2 下载安装SQL Server数据库&#xff08;服务和管理工具&#xff…

LeetCode 129, 133, 136

文章目录 129. 求根节点到叶节点数字之和题目链接标签思路代码 133. 克隆图题目链接标签思路代码 136. 只出现一次的数字题目链接标签思路代码 129. 求根节点到叶节点数字之和 题目链接 129. 求根节点到叶节点数字之和 标签 树 深度优先搜索 二叉树 思路 由于本题需要 从…

海外短剧系统搭建开发定制,H5/APP源码搭建部署,支持二开

目录 前言&#xff1a; 一、系统功能 二、部署流程 前言&#xff1a; 海外短剧系统搭建部署&#xff0c;前端uniapp&#xff0c;PHP语言。支持二开功能。 一、系统功能 以下是改写后的内容&#xff1a; 1. 多语言环境集成 —— 提供一键式翻译功能&#xff0c;轻松切换多…

【Vue3】计算属性

【Vue3】计算属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

IT common sense常识

how to input formative json data in console console.log({"message": [{"cat_id": 1,"cat_name": "大家电","cat_pid": 0,"cat_level": 0,"cat_deleted": false,,,,})2) how to clear unecessary c…

基于生物地理算法的MLP多层感知机优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 生物地理算法&#xff08;BBO&#xff09;原理 4.2 多层感知机&#xff08;MLP&#xff09; 4.3 BBO优化MLP参数 5.完整程序 1.程序功能描述 基于生物地理算法的MLP多层感知机优化mat…

【数学建模】——前沿图与网络模型:新时代算法解析与应用

目录 1.图与网络的基本概念 1. 无向图和有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与图的连通性 2.图的矩阵表示 1. 关联矩阵 2. 邻接矩阵 3.最短路问题 1.Dijkstra 算法 2.Floyd 算法 4.最小生成树问题 1.Kruskal 算法 2.Prim 算法 5.着色问题 6.…

C语言——字符串拼接strcat及自实现代码

strcat函数 在C语言中&#xff0c;strcat函数用于将两个字符串连接起来&#xff0c;即将源字符串&#xff08;source string&#xff09;追加到目标字符串&#xff08;destination string&#xff09;的末尾&#xff0c;并返回目标字符串。这个函数定义在头文件<string.h&g…

[Linux]Mysql之主从同步

AB复制 一、主从复制概述 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 主从复制的作用 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xf…

数据价值网络:开启数据驱动的新时代

数据价值网络&#xff1a;开启数据驱动的新时代 数据已成为第五大生产要素&#xff0c;其价值的实现有赖于广泛的应用和高效的流通。数据价值网络涵盖了从数据生成到运用的一系列价值创造环节&#xff0c;各企业基于自身资源禀赋和比较优势进行专业化分工。政策的支持和技术的创…

学懂C语言(十三):C语言中判断与循环的用法

目录 一、判断 1、if语句 2、switch语句 二、循环 1、while循环 2、do-while循环 3、for循环 三、关键点 循环 判断 C语言中的判断和循环是控制程序流程的基本结构&#xff0c;它们允许程序根据条件执行不同的代码块&#xff0c;或者重复执行某段代码。本节内容比较基…

入门C语言Day15——关系条件逻辑操作符

今天来学习操作符中的一些内容&#xff0c;主要讲的是关系&条件&逻辑操作符 1.关系操作符 首先要来了解一下什么是关系操作符&#xff0c;关系操作符其实就是关系运算符&#xff0c;关系运算符又和关系表达式有关。 C语言中用于比较的表达式&#xff0c;就被称为 “关…