STL中区间最值max_element和min_element的用法
2024-09-02 00:33:36
前面的博客已经讲解了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)。
最新文章
- 第二届中国移动互联网测试大会PPT
- 安卓Json介绍(转)。
- ubuntu将默认中文改成英文
- 性能测试vs负载测试vs压力测试-概念普及
- cocos2dx arpg单机手游
- spoj gss2 : Can you answer these queries II 离线&;&;线段树
- html学习 - 自己主动跳转与自己主动刷新
- Directx11学习笔记【十四】 使用最新的Effect框架和SDK
- WCF学习——WCF简介(三)
- jQuery事件合成
- Metadata获取的三种方式
- iOS实现pdf文件预览,上下翻页、缩放,读取pdf目录
- Ext-JS-Classic-Demo 面向pc端示例
- Linux内核及分析 第三周 Linux内核的启动过程
- vim basic
- java并发:AtomicInteger 以及CAS无锁算法【转载】
- 动态渲染的input怎么取消记忆功能
- 漫谈js自定义事件、DOM/伪DOM自定义事件
- lodop判断是否打印成功
- Hibernate各种查询操作(一)
热门文章
- Cocos2d-x 学习笔记(3.2) TransitionScene 过渡场景和场景切换的过程
- Javasrcipt中从一个url或者从一个字符串中获取参数值得方法
- Mybatis实现一对一查询 对ResultType和ResultMap分析
- SpringBoot:elasticSearch 7.2.0 Java High Level REST Client 搜索 API
- 《Java 8 in Action》Chapter 6:用流收集数据
- PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type
- [Python] 通过采集23万条数据,对《哪吒》影评分析
- 消费者、生产者Java代码示例,wait
- 在.net core web项目中生成图片验证码
- 交完论文才发现spss数据分析做错了