前面的博客已经讲解了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)。

STL中区间最值max_element和min_element的用法的更多相关文章

  1. max_element和min_element的用法

    首先,max_element和min_elemetn看字面意思是求最大值和最小值,这个确实是这个意思.不过,需要注意的是,他返回的是最大值(最小值)的地址,而非最大值(最小值).对于一般数组的用法则是 ...

  2. 0.1.2 max_element和min_element的用法

    找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个. 返回的是指针(元素地址). printf("%d\n",*max_element(a,a+n) ...

  3. STL中的所有算法(70个)

    STL中的所有算法(70个)----9种类型(略有修改by crazyhacking) 参考自: http://www.cppblog.com/mzty/archive/2007/03/14/1981 ...

  4. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  5. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  6. STL中的算法

    STL中的所有算法(70个) 参考自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.htmlhttp://hi.baidu.com/ding ...

  7. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  8. STL中map用法

    Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...

  9. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

随机推荐

  1. Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)

    简介 江湖有言:”代码写死一时爽,框架重构火葬场“,更有人戏言:”代码动态一时爽,一直动态一直爽

  2. 40道经典java多线程面试题

    40道经典java多线程面试题 题目来源 看完了java并发编程的艺术,自认为多线程"大成",然后找了一些面试题,也发现了一些不足. 一下问题来源于网上的博客,答案均为本人个人见解 ...

  3. RedHat 6.5换源

    https://wenku.baidu.com/view/5b87fb42c77da26924c5b03b.html

  4. Nacos(二):SpringCloud项目中接入Nacos作为注册中心

    前言 通过上一篇文章:Nacos介绍简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心 上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持 ...

  5. js 设计模式&&query

    1. 语法: try{           //需要执行的代码      }catch(e){           //错误处理 e程序遇到错误时的报错信息      } 2.惰性函数: 函数在第一次 ...

  6. 简析 Golang net/http 包

    net/http 包涵盖了与 HTTP 请求发送和处理的相关代码.虽然包中定义了大量类型.函数,但最重要.最基础的概念只有两个:ServeMux 和 Handler. ServeMux 是 HTTP ...

  7. (四十七)c#Winform自定义控件-树表格(treeGrid)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  8. Apache和Apache Tomcat

    Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是web服 ...

  9. xgboost与gdbt的不同和优化

    XGBoost是GBDT算法的一种变种,是一种常用的有监督集成学习算法:是一种 伸缩性强.便捷的可并行构建模型的Gradient Boosting算法 Xgboost和GBDT不同之处 xgboost ...

  10. 09_if条件语句的使用

    1.条件语句是用来判断给定的条件是否满足(表达式值是否为0),并根据判断的结果(真或假)决定执行的语句2.go语言和C语言的条件语句在语法格式上大体相似,但是还是有略微的不同,具体的细节如下 例子:p ...