一 写在前面

  • 本文介绍 C++ 标准库中的三个 用于获取元素最大值和最小值 的非更易型算法(nonmodifying algorithm): min_element、 max_element 和 min_max_element。同样均定义于头文件< algorithm >。

二 Demo

  • 代码:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <string>template <typename C>
void fill(C& container, int begin, int end) {for (auto i = begin; i <= end; i++) {container.emplace_back(i);}
}template <typename C>
void print(const std::string& pre, C container) {std::cout << pre;std::copy(container.begin(), container.end(),std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;
}int main() {{// min_element max_element min_max_elementstd::vector<int> vc;vc.emplace_back(1);fill(vc, 1, 9);vc.emplace_back(9);vc.emplace_back(9);print1("vc: ", vc);auto min = std::min_element(vc.begin(), vc.end());std::cout << "No." << std::distance(vc.begin(), min) << " is the min element." << std::endl;auto max = std::max_element(vc.begin(), vc.end());std::cout << "No." << std::distance(vc.begin(), max)<< " is the max element." << std::endl;auto min_max = std::minmax_element(vc.begin(), vc.end());std::cout << "min_max is No." << std::distance(vc.begin(), min_max.first) << " and No." << std::distance(vc.begin(), min_max.second) << std::endl;}std::cin.get();return 0;
}
  • std::distance 请参考 C++ iterator(1) 几个辅助函数
  • 结果:
vc: 1 1 2 3 4 5 6 7 8 9 9 9
No.0 is the min element.
No.9 is the max element.
min_max is No.0 and No.11
  • 注意

    • min_element 返回[first, last) 中指向第一个最小值的迭代器
    • max_element 返回[first, last) 中指向第一个最大值的迭代器
    • minmax_element 返回 std::pair<第一个最小值的迭代器, 最后一个最大值的迭代器>

三 min_element

template< class ForwardIt >
ForwardIt min_element( ForwardIt first, ForwardIt last );(1)(until C++17)
template< class ForwardIt >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
ForwardIt min_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)
template< class ForwardIt, class Compare >
ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );(3)(until C++17)
template< class ForwardIt, class Compare >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt min_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,Compare comp );(4)(since C++17)

四 max_element

template< class ForwardIt >
ForwardIt max_element( ForwardIt first, ForwardIt last );(1)(until C++17)
template< class ForwardIt >
constexpr ForwardIt max_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
ForwardIt max_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)
template< class ForwardIt, class Compare >
ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );(3)(until C++17)
template< class ForwardIt, class Compare >
constexpr ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt max_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, Compare comp );(4)(since C++17)

五 minmax_element (C++11)

template< class ForwardIt >
std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last );(1)(since C++11)(until C++17)
template< class ForwardIt >
constexpr std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
std::pair<ForwardIt,ForwardIt>
minmax_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)
template< class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++11)(until C++17)
template< class ForwardIt, class Compare >
constexpr std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>
minmax_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, Compare comp );(4)(since C++17)

六 参考

  • 《C++ 标准库 第二版》
  • cppreference min_element
  • cppreference max_element
  • cppreference minmax_element

C++ 算法 元素最大值和最小值相关推荐

  1. java 蓝桥杯算法训练 最大值与最小值的计算(题解)

    试题 算法训练 最大值与最小值的计算 资源限制 时间限制:1.0s 内存限制:512.0MB 输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输 ...

  2. 左神算法:最大值减去最小值小于或等于num的子数组的数量(Java版)

    本题来自左神<程序员面试代码指南>"最大值减去最小值小于或等于num的子数组的数量"题目. 题目 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: ...

  3. 查找数组元素最大值和最小值(分治法)

    1. 问题 给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同 2. 思路 2.1 首元素比较法 定义变量 max.min , 分别将第一个元素分别赋值给这两个变量,然后依次遍历 ...

  4. 【c语言】蓝桥杯算法训练 最大值与最小值的计算

    [问题描述] 输入11个整数,计算它们的最大值和最小值. [样例输入] 0 1 2 3 4 5 6 7 8 9 10 [样例输出] 10 0 #include<stdio.h> int m ...

  5. 蓝桥杯 ALGO-67 算法训练 最大值与最小值的计算

    输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0 #include <iostream> using namespac ...

  6. java通过键盘输入数组赋值并交换数组元素最大值和最小值

    步骤: 定义数组,声明最大最小值.数组交换中间值.最大最小索引值.扫描器类Scanner 循环输入元素值,遍历数组检查元素的值是否正确,找出最大最小值以及对应的索引值 交换最大最小值,遍历数组检查元素 ...

  7. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

    代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g  提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...

  8. 分治算法求n个元素的最大值和最小值

    分治算法求n个元素的最大值和最小值 算法思想:         1.将n个数均分为s1和s2         2.分别求解s1和s2的最大值和最小值            s1最大值为max1,s1最 ...

  9. 找出最大值和最小值(算法导论第三版9.1-2)

    找出最大值和最小值 (算法导论第三版9.1-2) 在最坏的情况下,比较次数下界是⌈3n/2⌉−2 void find_maximum_and_minimum_element(int *array,in ...

最新文章

  1. scala akka_如何对Scala和Akka HTTP应用程序进行Docker化-简单的方法
  2. Jenkins中运行脚本提示“Permission denied”,没有权限解决方法(MacOS)
  3. 在桌面应用程序与Web应用程序之间该如何选择
  4. 成功解决linear_model\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been ad
  5. golang常用手册:数组、变量作用域、函数
  6. 曼彻斯特编码_两种编码方式以及两种帧结构
  7. [HTTP] Nginx代理以及面向未来的HTTP
  8. 当代职场成功学:越懒惰,越躺赢
  9. python安装方法_Python如何批量更新已安装的库,为你介绍六种方法!
  10. 代理模式 委派模式 策略模式_委派模式和策略模式
  11. Windroy Lets Android run on Windows systems-- 国外androids 虚拟系统分享
  12. 【机器人】基于指数积的机械臂运动学标定
  13. Linux设备驱动--块设备(一)之概念和框架(转)
  14. antd tree节点添加删除按钮_MySQL索引原理及BTree(B/+Tree)结构详解
  15. python发送soap报文_python处理SOAP API
  16. 电阻(1)电阻种类篇
  17. 一起Talk Android吧(第三百一十七回:Android中的虚拟按键)
  18. 大数据与云计算技术周报(第150期)
  19. 关于comparator升序、降序
  20. 可以听歌玩游戏看股票背单词的ROS开发工具?小鱼:就差能点外卖了~

热门文章

  1. netty pipeline 执行顺序解读
  2. android 滑动取值_Android View篇之调整字体大小滑杆的实现
  3. Win10截屏的几种方法介绍
  4. 京东云 linux无法远程,怎样远程登录京东云云主机.pdf
  5. 手机微信登录的服务器繁忙请稍后再试,微信操作太频繁请稍后再试怎么办(登不上去要等多久)...
  6. python+pyautogui+pyperclip实现QQ自动加好友功能
  7. android程序毕业答辩ppt,软件毕业答辩PPT范例
  8. BaseFX 实习小记(终)
  9. PHP实现手机号或身份证号中间几位变*
  10. linux无法解析域名