简要介绍C++中的 max 和 min 函数以及返回值

 

简要介绍C++中的 max 和 min 函数

在C++中,std::maxstd::min 是标准库 <algorithm> 中提供的函数,用于比较两个或多个值并返回最大值或最小值。这些函数非常强大且灵活,支持多种数据类型(如整数、浮点数、字符串等),并且可以用于比较多个值或容器中的元素。

1. std::max 函数

std::max 用于返回两个值中的最大值。它有多种重载形式,可以处理不同类型的数据。

基本用法
#include <algorithm> // 包含 std::max 函数
#include <iostream>int main() {int a = 10, b = 20;int max_value = std::max(a, b); // 返回 a 和 b 中的最大值std::cout << "Max value: " << max_value << std::endl;double c = 3.5, d = 2.7;double max_double = std::max(c, d); // 返回 c 和 d 中的最大值std::cout << "Max double: " << max_double << std::endl;return 0;
}

输出

Max value: 20
Max double: 3.5
比较多个值

std::max 还可以接受多个参数,返回其中的最大值:

#include <algorithm>
#include <iostream>int main() {int max_value = std::max({10, 20, 30, 40, 50}); // 返回多个值中的最大值std::cout << "Max value: " << max_value << std::endl;double max_double = std::max({3.5, 2.7, 5.6, 1.2}); // 返回多个浮点数中的最大值std::cout << "Max double: " << max_double << std::endl;return 0;
}

输出

Max value: 50
Max double: 5.6

2. std::min 函数

std::min 用于返回两个值中的最小值,同样支持多种数据类型。

基本用法
#include <algorithm> // 包含 std::min 函数
#include <iostream>int main() {int a = 10, b = 20;int min_value = std::min(a, b); // 返回 a 和 b 中的最小值std::cout << "Min value: " << min_value << std::endl;double c = 3.5, d = 2.7;double min_double = std::min(c, d); // 返回 c 和 d 中的最小值std::cout << "Min double: " << min_double << std::endl;return 0;
}

输出

Min value: 10
Min double: 2.7
比较多个值

std::min 也可以接受多个参数,返回其中的最小值:

#include <algorithm>
#include <iostream>int main() {int min_value = std::min({10, 20, 30, 40, 50}); // 返回多个值中的最小值std::cout << "Min value: " << min_value << std::endl;double min_double = std::min({3.5, 2.7, 5.6, 1.2}); // 返回多个浮点数中的最小值std::cout << "Min double: " << min_double << std::endl;return 0;
}

输出

Min value: 10
Min double: 1.2

3. 使用自定义比较函数

std::maxstd::min 还支持自定义比较函数,这在处理复杂数据类型(如自定义结构体)时非常有用。

示例:自定义比较函数
#include <algorithm>
#include <iostream>
#include <string>struct Person {std::string name;int age;
};// 自定义比较函数,比较两个人的年龄
bool compare_age(const Person& p1, const Person& p2) {return p1.age < p2.age;
}int main() {Person p1 = {"Alice", 30};Person p2 = {"Bob", 25};// 使用自定义比较函数Person oldest = std::max(p1, p2, compare_age);std::cout << "Oldest person: " << oldest.name << " (" << oldest.age << " years old)" << std::endl;return 0;
}

输出

Oldest person: Alice (30 years old)

4. 使用 std::maxstd::min 与容器

std::maxstd::min 还可以用于容器(如 std::vectorstd::array 等),通过迭代器范围来找到最大值或最小值。

示例:在容器中使用
#include <algorithm>
#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50};// 找到容器中的最大值int max_value = *std::max_element(numbers.begin(), numbers.end());std::cout << "Max value in vector: " << max_value << std::endl;// 找到容器中的最小值int min_value = *std::min_element(numbers.begin(), numbers.end());std::cout << "Min value in vector: " << min_value << std::endl;return 0;
}

输出

Max value in vector: 50
Min value in vector: 10

总结

  • std::max:返回两个或多个值中的最大值。

  • std::min:返回两个或多个值中的最小值。

  • 支持多种数据类型(整数、浮点数、字符串等)。

  • 可以接受自定义比较函数。

  • 可以用于容器(如 std::vectorstd::array 等)。

详解返回值

在C++中,std::maxstd::min 函数用于比较值并返回最大值或最小值。这些函数的返回值类型与输入参数的类型一致。以下是对 std::maxstd::min 函数返回值的详细说明:

std::maxstd::min 的返回值

std::max
  • 功能:返回两个值中的最大值。

  • 返回值类型与输入参数的类型一致。如果输入是整数,返回值也是整数;如果输入是浮点数,返回值也是浮点数。

  • 示例

    int a = 10, b = 20;
    int max_value = std::max(a, b); // 返回值类型为int,值为20
std::min
  • 功能:返回两个值中的最小值。

  • 返回值类型与输入参数的类型一致。如果输入是整数,返回值也是整数;如果输入是浮点数,返回值也是浮点数。

  • 示例

    int a = 10, b = 20;
    int min_value = std::min(a, b); // 返回值类型为int,值为10

使用 std::maxstd::min 与容器

当与容器(如 std::vectorstd::array)一起使用时,std::maxstd::min 通常通过迭代器范围来操作。这些函数返回的是迭代器,指向容器中最大值或最小值的元素。

std::max_elementstd::min_element
  • std::max_element返回一个迭代器,指向容器中最大值的元素。

  • std::min_element返回一个迭代器,指向容器中最小值的元素。

  • 返回值类型迭代器类型,通常是容器的迭代器类型(如 std::vector<int>::iterator)。

示例代码

以下是一个示例,展示如何使用 std::max_elementstd::min_element 与容器:

#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::max_element 和 std::min_elementint main() {std::vector<int> numbers = {10, 20, 30, 40, 50};// 使用 std::max_element 找到最大值的迭代器auto max_it = std::max_element(numbers.begin(), numbers.end());// 使用 std::min_element 找到最小值的迭代器auto min_it = std::min_element(numbers.begin(), numbers.end());// 通过迭代器访问最大值和最小值int max_value = *max_it; // 解引用迭代器,得到最大值int min_value = *min_it; // 解引用迭代器,得到最小值std::cout << "Max value in vector: " << max_value << std::endl;std::cout << "Min value in vector: " << min_value << std::endl;return 0;
}

输出

Max value in vector: 50
Min value in vector: 10

返回值总结

  • std::maxstd::min

    • 返回值类型与输入参数的类型一致。

    • 返回的是值本身,而不是迭代器。

  • std::max_elementstd::min_element

    • 返回值类型是迭代器。

    • 返回的是指向容器中最大值或最小值元素的迭代器。

    • 需要通过解引用迭代器(*)来获取实际的值。

示例:比较返回值类型

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {10, 20, 30, 40, 50};// 使用 std::max 和 std::min 比较两个值int max_value = std::max(10, 20); // 返回值类型为intint min_value = std::min(10, 20); // 返回值类型为int// 使用 std::max_element 和 std::min_element 比较容器中的值auto max_it = std::max_element(numbers.begin(), numbers.end()); // 返回值类型为迭代器auto min_it = std::min_element(numbers.begin(), numbers.end()); // 返回值类型为迭代器// 输出结果std::cout << "Max value (std::max): " << max_value << std::endl;std::cout << "Min value (std::min): " << min_value << std::endl;std::cout << "Max value in vector (std::max_element): " << *max_it << std::endl;std::cout << "Min value in vector (std::min_element): " << *min_it << std::endl;return 0;
}

输出

Max value (std::max): 20
Min value (std::min): 10
Max value in vector (std::max_element): 50
Min value in vector (std::min_element): 10

总结

  • std::maxstd::min返回两个值中的最大值或最小值,返回值类型与输入参数的类型一致。

  • std::max_elementstd::min_element返回指向容器中最大值或最小值元素的迭代器,需要通过解引用迭代器来获取实际的值。


 

 

收藏加关注,观看不迷路 

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

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

相关文章

【MyDB】4-VersionManager 之 3-死锁及超时检测

【MyDB】4-VersionManager 之 3-死锁及超时检测 死锁及超时检测案例背景LockTable锁请求与等待管理 addvm调用addputIntoList&#xff0c;isInList&#xff0c;removeFromList 死锁检测 hasDeadLock方法资源释放与重分配 参考资料 死锁及超时检测 本章涉及代码&#xff1a;top/…

Elasticsearch:如何搜索含有复合词的语言

作者&#xff1a;来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战&#xff0c;因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名&#xff1a;Rindfleischetik…

服务器虚拟化实战:架构、技术与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分&#xff0c;通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…

【LLM】Ollama框架入门指北

note Ollama是一个开源框架&#xff0c;专门设计用于在本地运行大型语言模型。它的主要特点是将模型权重、配置和数据捆绑到一个包中&#xff0c;从而优化了设置和配置细节&#xff0c;包括GPU使用情况&#xff0c;简化了在本地运行大型模型的过程。Ollama提供了对模型量化的支…

Linux系统:Ubuntu替换镜像源具体方法;

在Linux系统更新下载软件时&#xff0c;如遇因镜像源问题下载失败时&#xff0c;我们就需要替换系统原有镜像源&#xff0c;那么&#xff0c;此时&#xff0c;你是否还在百度四处搜索可以用的镜像源地址&#xff0c;然后反复去测试源地址的正确性呢&#xff0c;下面介绍一个亲测…

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置&#xff0c;输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字&#xff0c;用于区分8.打开…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

d3.js: Relation Graph

d3.js Tags d3/d3 GitHub D3 by Observable | The JavaScript library for bespoke data visualization 下载或 <!-- 引入 D3.js 库 --> <script src"https://d3js.org/d3.v7.min.js"></script> <!-- 引入 D3.js 库 --> <…

Oracle Primavera P6自动进行进度计算

前言 在P6 Professional 有一个自动计划计算的选项&#xff0c;很多人不了解该设置如何使用&#xff0c;以及什么时候该启动这项配置。 详情 P6 Professional 默认为非自动进度计算。启用自动选项后&#xff0c;可以快速查看调度更改的效果。 ​ ​ 如图所示&#xff0c;当你…

反射、枚举以及lambda表达式

一.反射 1.概念&#xff1a;Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;既然能拿到那么&am…

【Proteus仿真】【51单片机】简易计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、可以进行简单的加减乘除运算 4、最大 9999*9999 二、使用步骤 系统运行后&#xff0c;LCD1602显示数据&#xff0c;通过矩阵按键…

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架&#xff0c;通过多层次的开放能力提供统一接入标准&#xff0c;实现三方框架快速…

(即插即用模块-特征处理部分) 十九、(NeurIPS 2023) Prompt Block 提示生成 / 交互模块

文章目录 1、Prompt Block2、代码实现 paper&#xff1a;PromptIR: Prompting for All-in-One Blind Image Restoration Code&#xff1a;https://github.com/va1shn9v/PromptIR 1、Prompt Block 在解决现有图像恢复模型时&#xff0c;现有研究存在一些局限性&#xff1a; 现有…

Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?

文章目录 13003数据结构与算法全书框架考试题型的分值分布如何&#xff1f; 本次内容概述绪论第一节概览什么是数据、数据元素&#xff0c;数据项&#xff0c;数据项的值&#xff1f;什么是数据结构&#xff1f;分哪两种集合形式&#xff08;逻辑和存储&#xff09;&#xff1f…

使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统

近期&#xff0c;我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子&#xff0c;需要在这类环境下开发程序。说实在的我也没有用过这个平台&#xff0c;但是基于常识&#xff0c;推测只要基于C和Qt&#xff0c;应该问题不大。 1. …

unity学习21:Application类与文件存储的位置

目录 1 unity是一个跨平台的引擎 1.1 使用 Application类&#xff0c;去读写文件 1.2 路径特点 1.2.1 相对位置/相对路径&#xff1a; 1.2.2 固定位置/绝对路径&#xff1a; 1.3 测试方法&#xff0c;仍然挂一个C#脚本在gb上 2 游戏数据文件夹路径&#xff08;只读&…

【Redis】hash 类型的介绍和常用命令

1. 介绍 Redis 中存储的 key-value 本身就是哈希表的结构&#xff0c;存储的 value 也可以是一个哈希表的结构 这里每一个 key 对应的一个 哈希类型用 field-value 来表示 2. 常用命令 命令 介绍 时间复杂度 hset key field value 用于设置哈希表 key 中字段 field 的值为…

基于51单片机和WS2812B彩色灯带的流水灯

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码四、主函数总结 系列文章目录 前言 用彩色灯带按自己想法DIY一条流水灯&#xff0c;谁不喜欢呢&#xff1f; 所用单片机&#xff1a;STC15W204S &#xff08;也可以用其他1T单片机&#xff0c;例如&#xff0c;S…

力扣017_最小覆盖字串题解----C++

题目描述 我们可以用滑动窗口的思想解决这个问题。在滑动窗口类型的问题中都会有两个指针&#xff0c;一个用于「延伸」现有窗口的 r 指针&#xff0c;和一个用于「收缩」窗口的 l 指针。在任意时刻&#xff0c;只有一个指针运动&#xff0c;而另一个保持静止。我们在 s 上滑动…

如何从客观角度批判性阅读分析博客

此文仅以个人博客为例&#xff0c;大量阅读朋友反馈给我的交流让我得知他们所理解我的博客所表达的意思并非我所想表达的&#xff0c;差异或大或小&#xff0c;因人而异。 观点与事实 只有从客观角度反复批判性阅读和分析&#xff0c;才能逐渐清晰观点和事实。 观点不等于事实…