C++max函数的使用案例20个

文章目录

    • 1. **基本用法:**
    • 2. **比较浮点数:**
    • 3. **比较字符串:**
    • 4. **使用自定义比较函数:**
    • 5. **比较容器中的元素:**
    • 6. **使用`std::initializer_list`:**
    • 7. **变长参数版本(C++11及以上):**
    • 8. **C++17起可用的`std::optional`与`std::max`结合:**
    • 9. **比较结构体成员:**
    • 10. **并行计算环境下的`std::max`(假设使用了并行算法库):**
    • 11. **比较自定义类型的引用计数智能指针**:
    • 12. **使用`std::max`与`std::accumulate`结合计算数组最大值**:
    • 13. **使用`std::max`与`std::transform_reduce`计算两个序列对应元素的最大值**:
    • 14. **比较具有权重的元素**:
    • 15. **动态分配内存时获取最大尺寸**:
    • 16. **在多维数组中查找最大值**:
    • 17. **在关联容器(如map)中查找最大键值对**:
    • 18. **在非连续存储结构中查找最大值**:
    • 19. **使用`std::max`与`std::for_each`结合遍历集合并输出最大值**:
    • 20. **在C++20引入的概念式范围(ranges)中查找最大值**:

以下是一系列C++ std::max函数的使用示例,涵盖不同情境下的应用:

1. 基本用法:

#include <algorithm>int main() {int a = 10, b = 20;int max_value = std::max(a, b);std::cout << "The maximum value is: " << max_value << std::endl;  // 输出 "20"return 0;
}

2. 比较浮点数:

#include <algorithm>double a = 3.14, b = 2.71;
double max_double = std::max(a, b);
std::cout << "The maximum double is: " << max_double << std::endl;  // 输出 "3.14"

3. 比较字符串:

#include <algorithm>
#include <string>std::string s1 = "apple", s2 = "banana";
std::string longer_str = std::max(s1, s2);
std::cout << "The longer string is: " << longer_str << std::endl;  // 输出 "banana"

4. 使用自定义比较函数:

struct Person {std::string name;int age;
};bool compareAge(const Person& p1, const Person& p2) {return p1.age < p2.age;
}Person p1 = {"Alice", 25}, p2 = {"Bob", 30};
Person older_person = std::max(p1, p2, compareAge);
std::cout << "The older person is: " << older_person.name << std::endl;  // 输出 "Bob"

5. 比较容器中的元素:

#include <algorithm>
#include <vector>std::vector<int> v = {1, 3, 5, 2, 4};
auto it = std::max_element(v.begin(), v.end());
std::cout << "The maximum element in the vector is: " << *it << std::endl;  // 输出 "5"

6. 使用std::initializer_list

#include <algorithm>
#include <iostream>int main() {int max_num = std::max({10, 20, 30, 5, 15});std::cout << "The maximum number from initializer list is: " << max_num << std::endl;  // 输出 "30"return 0;
}

7. 变长参数版本(C++11及以上):

#include <algorithm>template<typename T>
T maxOfMany(const T& first, const T& second, const T& rest...) {T result = std::max(first, second);va_list args;va_start(args, second);for (T arg = va_arg(args, T); arg != T(); arg = va_arg(args, T)) {result = std::max(result, arg);}va_end(args);return result;
}int main() {int m = maxOfMany(1, 2, 3, 4, 5);std::cout << "The maximum of several numbers is: " << m << std::endl;  // 输出 "5"return 0;
}

注意:C++标准库并未提供内置的变长参数版本的std::max,上例展示了如何自行实现类似功能。

8. C++17起可用的std::optionalstd::max结合:

#include <optional>
#include <algorithm>std::optional<int> a = 10, b = 20, c = std::nullopt;
std::optional<int> max_opt = std::max({a, b, c});
if (max_opt.has_value()) {std::cout << "The maximum optional value is: " << max_opt.value() << std::endl;  // 输出 "20"
} else {std::cout << "No valid optional values provided." << std::endl;
}

9. 比较结构体成员:

#include <algorithm>
#include <tuple>struct Employee {std::string name;double salary;
};auto salary_comparer = [](const Employee& e1, const Employee& e2) {return std::tie(e1.salary) < std::tie(e2.salary);
};Employee e1 = {"Alice", 50000.0}, e2 = {"Bob", 60000.0};
Employee high_salary_employee = std::max(e1, e2, salary_comparer);
std::cout << "Employee with the highest salary is: " << high_salary_employee.name << std::endl;  // 输出 "Bob"

10. 并行计算环境下的std::max(假设使用了并行算法库):

#include <algorithm>
#include <execution>
#include <vector>std::vector<int> nums = {...};  // 填充大量数据// 注意:在实际并行环境中,应考虑同步问题和负载均衡
int parallel_max = std::reduce(std::execution::par_unseq, nums.begin(), nums.end(), std::numeric_limits<int>::min(),[](int a, int b) { return std::max(a, b); });std::cout << "The maximum value computed in parallel is: " << parallel_max << std::endl;

最后一个例子利用了C++17的并行算法库(假设已经存在并行执行策略),但实际上,C++标准库并没有直接提供并行版的std::max,此处使用了std::reduce函数并提供了自定义的组合器来模拟寻找最大值的过程。在真实场景中,使用并行算法库时需要谨慎处理数据同步和其他并发问题。

由于前文已列出10个较全面的std::max使用案例,这里再补充几个较为特殊或进阶的使用方法:

11. 比较自定义类型的引用计数智能指针

```cpp
#include <memory>
#include <algorithm>struct RefCounted {int value;std::shared_ptr<int> ref_count;bool operator<(const RefCounted& other) const {return *ref_count < *other.ref_count;}
};std::vector<std::shared_ptr<RefCounted>> objects = { /*...*/ };
auto max_ref_count_obj = *std::max_element(objects.begin(), objects.end(),[](const auto& a, const auto& b) {return *a->ref_count < *b->ref_count;});std::cout << "Object with the highest reference count has value: " << max_ref_count_obj->value << std::endl;
```

12. 使用std::maxstd::accumulate结合计算数组最大值

```cpp
#include <numeric>
#include <vector>std::vector<int> arr = {1, 2, 3, 4, 5};
int max_val = std::accumulate(arr.begin(), arr.end(), std::numeric_limits<int>::min(),[](int acc, int val) { return std::max(acc, val); });std::cout << "The maximum value in the array is: " << max_val << std::endl;
```

13. 使用std::maxstd::transform_reduce计算两个序列对应元素的最大值

```cpp
#include <numeric>
#include <vector>std::vector<int> a = {1, 2, 3};
std::vector<int> b = {4, 5, 6};// 确保两个向量长度一致
assert(a.size() == b.size());int max_pairwise = std::transform_reduce(a.begin(), a.end(), b.begin(), std::numeric_limits<int>::min(),[](int a, int b) { return std::max(a, b); },[](int acc, int val) { return std::max(acc, val); }
);std::cout << "The maximum pairwise value is: " << max_pairwise << std::endl;
```

14. 比较具有权重的元素

```cpp
struct WeightedValue {int value;int weight;
};bool compareWeighted(const WeightedValue& w1, const WeightedValue& w2) {return w1.weight * w1.value < w2.weight * w2.value;
}std::vector<WeightedValue> weightedValues = { /*...*/ };
auto max_weighted = *std::max_element(weightedValues.begin(), weightedValues.end(), compareWeighted);std::cout << "The most valuable item considering weight is: " << max_weighted.value << std::endl;
```

15. 动态分配内存时获取最大尺寸

```cpp
#include <vector>
#include <algorithm>std::vector<std::unique_ptr<int[]>> arrays = { /*...*/ };
int max_size = std::max_element(arrays.begin(), arrays.end(),[](const auto& a, const auto& b) {return a->size() < b->size();})->size();std::cout << "The maximum allocated size among the arrays is: " << max_size << std::endl;
```

以上案例展示了在更复杂的数据结构和场景中如何巧妙地运用std::max函数,同时也体现了C++泛型编程的优势。

16. 在多维数组中查找最大值

```cpp
#include <algorithm>
#include <array>std::array<std::array<int, 3>, 2> matrix = {{{1, 2, 3}, {4, 5, 6}}};
int max_in_matrix = *std::max_element(matrix.begin(), matrix.end(),[](const auto& row1, const auto& row2) {return *std::max_element(row1.begin(), row1.end()) <*std::max_element(row2.begin(), row2.end());});std::cout << "The maximum value in the matrix is: " << max_in_matrix << std::endl;  // 输出 "6"
```

17. 在关联容器(如map)中查找最大键值对

```cpp
#include <algorithm>
#include <map>std::map<std::string, int> scores = {{"Alice", 90}, {"Bob", 95}, {"Charlie", 92}};
auto max_entry = *std::max_element(scores.begin(), scores.end(),[](const auto& pair1, const auto& pair2) {return pair1.second < pair2.second;});std::cout << "The student with the highest score is: " << max_entry.first << ", with a score of " << max_entry.second << std::endl;
```

18. 在非连续存储结构中查找最大值

```cpp
#include <algorithm>
#include <deque>std::deque<int> deque_with_gaps = {1, 2, 4, 8, 16, 32, 64};
auto max_deque = *std::max_element(deque_with_gaps.begin(), deque_with_gaps.end());std::cout << "The maximum value in the deque is: " << max_deque << std::endl;  // 输出 "64"
```

19. 使用std::maxstd::for_each结合遍历集合并输出最大值

```cpp
#include <algorithm>
#include <set>
#include <iostream>std::set<int> unique_numbers = {1, 2, 3, 4, 5};
int current_max = std::numeric_limits<int>::min();
std::for_each(unique_numbers.begin(), unique_numbers.end(),[&](const int& num) {current_max = std::max(current_max, num);});std::cout << "The maximum value in the set is: " << current_max << std::endl;  // 输出 "5"
```

20. 在C++20引入的概念式范围(ranges)中查找最大值

```cpp
#include <ranges>std::vector<int> vec = {1, 2, 3, 4, 5};
int max_range = std::ranges::max(vec);std::cout << "The maximum value in the range-based view is: " << max_range << std::endl;  // 输出 "5"
```

这些案例展示了std::max在不同数据结构和容器中的应用,包括多维数组、关联容器、非连续存储结构以及C++20的新特性——概念式范围。
python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

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

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

相关文章

Elasticsearch搜索引擎

目录 初识elasticsearch 了解ES 什么是elasticsearch elasticsearch的发展 搜索引擎技术排名&#xff1a; 总结 倒排索引 正向索引和倒排索引 正向索引 倒排索引 总结 es的一些概念 文档 索引 概念对比 架构 总结 安装es&#xff0c;kibana 安装es 安装kiba…

Redis的三种集群模式(图解)

主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能&#xff0c;但是从属节点只提供读取功能。 主从复制的数据同步过程如下&#xff1a; &#xff08;1&#xff09;首先主节点启动&#xff0c;然后从属节点启动&#xff0c;从属节点会连接主节点并发送SYNC命令以…

Android多线程实现方式及并发与同步,Android面试题汇总

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序&#xff0c;再由桌面程序来控制不同的硬件设…

python 蓝桥杯填空题

文章目录 字母数判断列名&#xff08;进制问题&#xff09;特殊日期大乘积星期几 字母数 由于是填空题&#xff0c;那么寻找的话&#xff0c;就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名&#xff08;进制问题&#xff09; 这道题目&#xff0c;我们可…

Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-agd7RSCGMblYxo85 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;作为人工智能领域的一项重大突破&#xff0c;开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器&#xff0c;为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

[BUG]vscode插件live server无法自动打开浏览器

问题描述&#xff1a; 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法&#xff1a; 配置环境变量&#xff0c;在path中添加program files

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程&#xff0c;从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样&#xff1f; 天津市住房保障家庭在享受住房保障期间&#xff0c;如在应申…

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战&#xff0c;平时运行好好的系统&#xff0c;在 02-29 这一天&#xff0c;好像就会有各种毛病。 虽然&#xff0c;提前一天&#xff0c;领导们都会提前给下面打招呼。但是&#xff0c;不可避免的&#xff0c;今天公司因为闰年还是有一些小故障。…

BUUCTF-Misc-百里挑一

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件&#xff1a; 全是在传图片时候的流量&#xff0c;先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

vulhub中ThinkPHP5 5.0.23 远程代码执行漏洞复现

ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中&#xff0c;获取method的方法中没有正确处理方法名&#xff0c;导致攻击者可以调用Request类任意方法并构造利用链&#xff0c;从而导致远程代码执行漏洞。 环境启动后&#xff0c;访问http://your-ip:8080即可看到…

Linux系统:内核参数调优

目录 1、/proc目录 2、sysctl命令 3.1 控制源路由验证 3.2 控制内核的系统请求调试功能 3.3 控制核心转储是否将PID附加到核心文件名 3.4 控制TCP同步cookie的使用 3.5 在网桥上禁用netfilter 3.6 控制消息队列的默认最大大小 3.7 调试TCP内核参数 3.8 调试套…

(学习日记)2024.03.06:UCOSIII第八节:空闲任务+阻塞延时+main函数修改

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【高效开发工具系列】vimdiff简介与使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LeetCode102.二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]输入&#xff1a;root [1] 输出&am…

python基础——基础语法

文章目录 一、基础知识1、字面量2、常用值类型3、注释4、输入输出5、数据类型转换6、其他 二、字符串拓展1、字符串定义2、字符串拼接3、字符串格式化4、格式化精度控制 三、条件/循环语句1、if2、while3、for循环 四、函数1、函数定义2、函数说明文档3、global关键字 五、数据…

在亚马逊云科技上开启您的多机多卡分布式训练之旅

随着机器学习模型规模的扩大和数据量的增加&#xff0c;单个设备的计算能力和内存容量逐渐成为瓶颈。这导致训练过程变得缓慢且耗时长&#xff0c;限制了模型的进一步发展和改进。为了解决这个问题&#xff0c;分布式训练应运而生。它利用多个计算资源并行地执行计算任务&#…

二维码门楼牌管理系统应用场景:紧急服务部门的新助手

文章目录 前言一、二维码门楼牌管理系统的引入二、紧急服务部门的应用场景三、与紧急服务部门的联动机制四、技术挑战与未来发展 前言 在数字化时代&#xff0c;二维码门楼牌管理系统不仅为城市管理带来了便捷&#xff0c;更为紧急服务部门开辟了新的救援通道。本文将探讨二维…

Claude3荣登榜首,亚马逊云科技为您提供先行体验!

Claude3荣登榜首&#xff0c;亚马逊云科技为您提供先行体验&#xff01; 个人简介前言抢先体验关于Amazon BedrockAmazon Bedrock 的功能 Claude3体验教程登录Amazon Bedrock试用体验管理权限详细操作步骤1.提交应用场景详细信息2.请求模型的访问权限3.请求成功&#xff0c;开始…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库&#xff08;分布式数据库架构&#xff09;相关软件 业务拆分…