博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL中区间最值max_element和min_element的用法
阅读量:4702 次
发布时间:2019-06-10

本文共 2086 字,大约阅读时间需要 6 分钟。

前面的博客已经讲解了nth_element寻找区间第K大的用法,现在我们来说说这两个找区间最值的用法。两个函数都包含在algorithm库中。

一、函数原型

  • max_element

1 template< class ForwardIt >2 ForwardIt max_element(ForwardIt first, ForwardIt last );3 template< class ForwardIt, class Compare >4 ForwardIt max_element(ForwardIt first, ForwardIt last, Compare comp );
  • min_element
1 template< class ForwardIt >2 ForwardIt min_element( ForwardIt first, ForwardIt last );3 template< class ForwardIt, class Compare >4 ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );

1.参数

  first,end——区间范围

  comp——自定义比较函数

顾名思义,max_element就是求区间最大值,而min_element就是求区间最小值。当然也可以自定义比较函数达到自己想要的“最大值”或者“最小值”

二、代码演示

1 #include 
2 using namespace std;3 4 int main(){5 int a[] = {
1,2,3,4,5};6 int maxa = max_element(a,a+5), mina = min_element(a,a+5);7 cout << maxa << ' ' << mina << endl;8 return 0;9 }

预计上面代码输出为5 1,但是最终却编译错误。Why?

因为这两个函数返回的是最大值或者最小值的迭代器,所以我们得加上一个*号得到值,最终代码如下:

1 #include 
2 using namespace std; 3 4 int main(){ 5 int a[] = {
1,2,3,4,5}; 6 int maxa = *max_element(a,a+5), mina = *min_element(a,a+5); 7 cout << maxa << ' ' << mina << endl; 8 return 0; 9 }10 11 /**运行结果12 5 113 */

 

三、手动实现

这两个函数手动实现就很简单了,直接遍历一遍找最值即可,这里贴一下cppreference上的源码实现:

1 //版本一 2 template
3 ForwardIt max_element(ForwardIt first, ForwardIt last) 4 { 5 if (first == last) { 6 return last; 7 } 8 ForwardIt largest = first; 9 ++first;10 for (; first != last; ++first) {11 if (*largest < *first) {12 largest = first;13 }14 }15 return largest;16 }17 18 //版本二19 template
20 ForwardIt max_element(ForwardIt first, ForwardIt last, 21 Compare comp)22 {23 if (first == last) {24 return last;25 }26 ForwardIt largest = first;27 ++first;28 for (; first != last; ++first) {29 if (comp(*largest, *first)) {30 largest = first;31 }32 }33 return largest;34 }

 

四、复杂度分析

比较n-1次,n是区间长度,时间负责度为O(n)。

转载于:https://www.cnblogs.com/xenny/p/10195292.html

你可能感兴趣的文章
武汉群硕软件实习协议
查看>>
单元测试代码:SpringTest+JUnit
查看>>
Let the Balloon Rise
查看>>
finalize过程
查看>>
从零开始人工智能AI(一)-k-nn-矩阵
查看>>
抽奖概率计算
查看>>
x64的调用约定
查看>>
linux 禁ping
查看>>
设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值,push、pop、min三个方法的时间复杂度必须是O(1)...
查看>>
函数定义与使用,字符串类型
查看>>
Java - TreeMap源码解析 + 红黑树
查看>>
Android-事件分发(ViewGroup)
查看>>
Djngo 请求的生命周期
查看>>
[kuangbin带你飞]专题1-23题目清单总结
查看>>
EF6.0批量插入
查看>>
Knockout v3.4.0 中文版教程-1-入门和安装
查看>>
JavaScript 基础一
查看>>
数据库范式1NF 2NF 3NF BCNF
查看>>
ComboBox控件隐藏fieldLabel不能隐藏问题解决
查看>>
Hibernate自动生成DO手写DAO的注意事项
查看>>