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://xiahunao.cn/news/3250318.html

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

相关文章

全国产服务器主板:搭载飞腾FT2000+/64处理器的高性能加固服务器

近期很多朋友咨询全国产化的服务器主板。搭载的是飞腾FT-2000/64的全国产化服务器主板。他的主要特点是&#xff1a;①丰富的PCIe、千兆以太网、SATA接口&#xff0c;可用作数据处理、存储、通信服务器&#xff1b;②​​​​​​​板载独立显示芯片&#xff0c;对外HDMI/VGA/L…

C语言第5天作业 7月16日

目录 1.求1000以内所有的质数。 2.有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 3.猴子吃桃问题 4.判断最大值 1.求1000以内所有的质数。 质数&#xff1a;只能够1和它本身整除 #include <stdio.h> in…

Java 快速入门学习 -- Day 2

Java 快速入门 Ⅱ 学习视频maven&#xff08;图书管理员&#xff09;IDEA使用 maven框架MyBatis① MyBatis 是持久层框架② MyBatis 是 ORM 框架③ 搭建第一个 MyBatis 框架1、创建数据库表&#xff08;wy数据库 t_book 表&#xff09;2、创建maven 项目3、添加依赖4、创建 My…

万界星空科技MES系统生产计划管理的功能

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;的生产计划管理功能是其核心功能之一&#xff0c;旨在将企业的生产计划转化为实际的生产操作&#xff0c;并通过实时监控和调整来确保生产活动的顺利进行。以下是MES系统生产计划管理功…

关于 Qt输入法在arm特定的某些weston下出现调用崩溃 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140423667 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

算法篇 滑动窗口 leetCode 水果成篮

水果成蓝 1.题目描述2.图形分析2.1原理解释2.2 怎么想出使用滑动窗口2.3 图形分析 3.代码演示 1.题目描述 2.图形分析 2.1原理解释 2.2 怎么想出使用滑动窗口 2.3 图形分析 3.代码演示

C语言数组进阶探索

1、数组名含义 在C语言程序中&#xff0c;数组的出现有两种可能的含义&#xff1a; &#xff08;1&#xff09;代表整个数组 &#xff08;2&#xff09;代表其首元素的地址 当出现以下情形时&#xff0c;数组代表的是整个数组&#xff1a; &#xff08;1&#xff09;在数组定义…

Zabbix × openGauss完成兼容 | 信创路上,得其法则事半功倍

在当今快速发展的信息技术领域&#xff0c;数据库作为核心组件之一&#xff0c;其性能、可靠性和兼容性一直是企业和开发者关注的焦点。 近期&#xff0c;Zabbix与openGauss完成了兼容性认证&#xff0c;经过严格联合测试&#xff0c;双方产品实现完全兼容&#xff0c;整体运行…

搭建个人智能家居 7 - 空气颗粒物检测

搭建个人智能家居 7 - 空气颗粒物检测 前言说明PMS5003ESPHomeHomeAssistant结束 前言 到目前为止&#xff0c;我们这个智能家居系统添加了4个外设&#xff0c;分别是&#xff1a;LED灯、RGB灯、DHT11温度传感器和SGP30。今天继续添加环境测量类传感器“PMS5003空气颗粒物检测…

前端JS特效第45集:js实现图片放大和拖拽特效

js实现图片放大和拖拽特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>js实现图片放大和拖拽特效</title><meta…

开放式耳机哪个品牌最好?2024年度首发推荐榜单来了!

在很多专业运动人士中&#xff0c;开放式耳机正变得越来越受欢迎。无论是享受纯净的音质、沉浸式的听觉体验&#xff0c;还是舒适度和通透感方面的追求&#xff0c;开放式耳机都展现出了独特的魅力。本文将带您深入探索开放式耳机的世界&#xff0c;揭示其不可忽视的优点和无限…

拒绝废话:computed、watch和methods的区分和使用场景

computed、watch和methods是用于处理数据和响应数据变化的不同方式&#xff0c;三者之间有什么不同呢&#xff0c;贝格前端工场作为10年前端老司机&#xff0c;用浅显的语言给大家分享一下。 computed&#xff1a; computed属性是用来定义一个基于依赖的响应式属性。它会根据…

CVPR2024论文解读|对齐人类审美!MPS让图像生成评估更“懂你”

导读 当人类从不同角度评估不同类型的图像时&#xff0c;偏好结果会有所不同。因此&#xff0c;为了学习多维的人类偏好&#xff0c;我们提出人类多元偏好模型&#xff08;MPS&#xff09;&#xff0c;这是第一个评估文本生成图像的多维评分模型。MPS在3个公开数据集上表现出色…

医疗设备安全、可靠,国产大功率医疗电源功不可没,旭之源医疗电源拥有高可靠性、优异EMC性能、满足医疗认证等优势!

我国作为人口大国&#xff0c;人均医疗资源相较于发达国家仍有不足&#xff0c;医疗健康产业还有很大提升空间。卡脖子的现象在医疗器械中十分明显&#xff0c;这也是医疗产业重点需要解决的。“国产化”便是有效的解决方案。 受益于医疗行业对产品自主可控意识的提升&#xff…

MySQL----初始数据类型

前言 一、tinyint 范围&#xff1a;-128-----127 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的。如果我们向mysqlt特定的类型中插入不合法的数据&#xff0c;Mysq一般会直接拦截&#xff0c…

【python】Python高阶函数--map函数的详细语法分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

哪个无线麦克风音质最好,无线领夹麦克风哪个牌子好,麦克风推荐

​如今&#xff0c;网络世界丰富多彩&#xff0c;每个人都有机会成为焦点。从旅行博主的精彩游记&#xff0c;到健身达人的锻炼分享&#xff0c;再到音乐爱好者的才艺展示&#xff0c;优质的内容层出不穷。如果你也渴望在这个舞台上大放异彩&#xff0c;一款出色的无线麦克风将…

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染&#xff01;今天和大家分享一下&#xff0c;人气推荐栏目的前端页面如何渲染内容。 经历过上一次的&#xff0c;新鲜好物的栏目渲染之后&#xff0c;我们已经熟练了&#xff0c;vue3的接口调用&#xff0c;数据渲染到页面中的整…

2024年7月17日(nodejs,npm设置国内镜像,vue脚手架,远程管理ssh,踢出用户,scp命令,ssh免密登录)

1、安装nodejs服务 nodejs是一个运行1环境&#xff0c;和javajdk运行环境格式一样 [roota ~]# yum -y install nodejs.x86_64 安装完成之后&#xff0c;使用node -v 查看版本 [roota ~]# node -v v16.20.2 2、简易服务器的环境安装npm 安装包管理器 npm node packae manger [ro…

【计算机毕设论文】基于SpringBoot学生作业管理系统

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等相…