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…

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…

海外短剧系统搭建开发定制,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.…

[Linux]Mysql之主从同步

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

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

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

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

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

Cadence学习笔记(十三)--设置边框与异形铺铜

直接导入板框用小眼睛可以看到所有的都是线的属性&#xff1a; 那么如何让它变成板框呢&#xff1f;这里先跳转到下图中的层&#xff1a; 将Z--CPOY这一层变成shape区&#xff1a; 之后用Z--copy: Z--COPY设置如下参数&#xff0c;铺铜内缩20mil: 之后选择长方形铺铜就可以了&…

【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…

CSS 两种盒模型 box-sizing content-box 和 border-box

文章目录 Intro谨记box-sizing 两个不同赋值的效果区别&#xff1f;宽高的数值计算标准盒模型 box-sizing: content-box; box-sizing 属性的全局设置 Intro 先问一句&#xff1a;box-sizing 和它的两个属性值是做什么用的&#xff1f;以前我并不知道它的存在&#xff0c;也做…

集成学习在数学建模中的应用

集成学习在数学建模中的应用 一、集成学习概述&#xff08;一&#xff09;基知&#xff08;二&#xff09;相关术语&#xff08;三&#xff09;集成学习为何能提高性能&#xff1f;&#xff08;四&#xff09;集成学习方法 二、Bagging方法&#xff08;一&#xff09;装袋&…

昇思25天学习打卡营第22天 | DCGAN生成漫画头像

昇思25天学习打卡营第22天 | DCGAN生成漫画头像 文章目录 昇思25天学习打卡营第22天 | DCGAN生成漫画头像DCGAN模型数据集数据下载和超参数创建数据集数据集可视化 搭建网络生成器判别器损失函数和优化器 模型训练总结打卡 DCGAN模型 深度卷积对抗生成网络&#xff08;Depp Co…