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

一、函数原型

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

1.参数

  first,end——区间范围

  comp——自定义比较函数

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

二、代码演示

 #include <bits//stdc++.h>
using namespace std; int main(){
int a[] = {,,,,};
int maxa = max_element(a,a+), mina = min_element(a,a+);
cout << maxa << ' ' << mina << endl;
return ;
}

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

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

 #include <bits//stdc++.h>
using namespace std; int main(){
int a[] = {,,,,};
int maxa = *max_element(a,a+), mina = *min_element(a,a+);
cout << maxa << ' ' << mina << endl;
return ;
} /**运行结果
5 1
*/

三、手动实现

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

 //版本一
template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last)
{
if (first == last) {
return last;
}
ForwardIt largest = first;
++first;
for (; first != last; ++first) {
if (*largest < *first) {
largest = first;
}
}
return largest;
} //版本二
template<class ForwardIt, class Compare>
ForwardIt max_element(ForwardIt first, ForwardIt last,
Compare comp)
{
if (first == last) {
return last;
}
ForwardIt largest = first;
++first;
for (; first != last; ++first) {
if (comp(*largest, *first)) {
largest = first;
}
}
return largest;
}

四、复杂度分析

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

最新文章

  1. 第二届中国移动互联网测试大会PPT
  2. 安卓Json介绍(转)。
  3. ubuntu将默认中文改成英文
  4. 性能测试vs负载测试vs压力测试-概念普及
  5. cocos2dx arpg单机手游
  6. spoj gss2 : Can you answer these queries II 离线&amp;&amp;线段树
  7. html学习 - 自己主动跳转与自己主动刷新
  8. Directx11学习笔记【十四】 使用最新的Effect框架和SDK
  9. WCF学习——WCF简介(三)
  10. jQuery事件合成
  11. Metadata获取的三种方式
  12. iOS实现pdf文件预览,上下翻页、缩放,读取pdf目录
  13. Ext-JS-Classic-Demo 面向pc端示例
  14. Linux内核及分析 第三周 Linux内核的启动过程
  15. vim basic
  16. java并发:AtomicInteger 以及CAS无锁算法【转载】
  17. 动态渲染的input怎么取消记忆功能
  18. 漫谈js自定义事件、DOM/伪DOM自定义事件
  19. lodop判断是否打印成功
  20. Hibernate各种查询操作(一)

热门文章

  1. ‎Cocos2d-x 学习笔记(3.2) TransitionScene 过渡场景和场景切换的过程
  2. Javasrcipt中从一个url或者从一个字符串中获取参数值得方法
  3. Mybatis实现一对一查询 对ResultType和ResultMap分析
  4. SpringBoot:elasticSearch 7.2.0 Java High Level REST Client 搜索 API
  5. 《Java 8 in Action》Chapter 6:用流收集数据
  6. PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type
  7. [Python] 通过采集23万条数据,对《哪吒》影评分析
  8. 消费者、生产者Java代码示例,wait
  9. 在.net core web项目中生成图片验证码
  10. 交完论文才发现spss数据分析做错了