15分钟带你了解lower_bound和upper_bound

🏆今日学习目标:
🍀理解,学会lower_bound和upper_bound原理及其用法
✅创作者:贤鱼
🎉个人主页:贤鱼的个人主页
🔥专栏系列:基础知识

请添加图片描述

lower_bound

定义:找到第一个大于等于目标数字的数字
注意,lower和upper返回的都是地址,减去数组得到下标

用法lower_bound(数组开始搜索位置,数组结束搜索位置,目标数字);

int lu[7]={0,1,2,4,7,16,32};

这里定义一个数组,方便讲解,开头是0让第一个数字下标从1开始

cout<<lower_bound(lu,lu+6,7)-lu<<" "<<lu[lower_bound(lu,lu+6,7)-lu]<<endl;

输出内容,数组内下标为4的数据正式7,同时7等于7
在这里插入图片描述

upper_bound

定义:找到第一个大于目标数字的数字

用法upper_bound(数组开始搜索位置,数组结束搜索位置,目标数字);

cout<<upper_bound(lu,lu+6,7)-lu<<" "<<lu[upper_bound(lu,lu+6,7)-lu]<<endl;

输出了5,和16,很明显下标为5的正式16,同时在这个升序数组中第一个比他大的正式16
在这里插入图片描述

其他用法

前面讲过了如何找到第一个大于或者大于等于目标数字的下标,现在讲一下如何找到小于或者小于等于数字的下标

int up[7]={66,32,16,9,7,3,2};

这里

小于等于

我们在目标数字后面加一个greater可以实现

cout<<lower_bound(up,up+6,7,greater<int>())-up<<" "<<up[lower_bound(up,up+6,7,greater<int>())-up]<<endl;

可以看到返回了4和7,因为我们重新定义的数组下标为4的数字正好为7,由此可见我们实现了寻找小于等于目标数字
在这里插入图片描述

小于

cout<<upper_bound(up,up+6,7,greater<int>())-up<<" "<<up[upper_bound(up,up+6,7,greater<int>())-up]<<endl;

这里输出了5和3,下标为5的数字是3,这里寻找小于目标数字的,所以不选择7,选择了3
在这里插入图片描述

总结

	int lu[7]={0,1,2,4,7,16,32}; 
	cout<<lower_bound(lu,lu+6,7)-lu<<" "<<lu[lower_bound(lu,lu+6,7)-lu]<<endl;    //第一个大于等于
	cout<<upper_bound(lu,lu+6,7)-lu<<" "<<lu[upper_bound(lu,lu+6,7)-lu]<<endl;    //第一个大于
	int up[7]={66,32,16,9,7,3,2};
	cout<<lower_bound(up,up+6,7,greater<int>())-up<<" "<<up[lower_bound(up,up+6,7,greater<int>())-up]<<endl;//第一个小于等于  
	cout<<upper_bound(up,up+6,7,greater<int>())-up<<" "<<up[upper_bound(up,up+6,7,greater<int>())-up]<<endl; //第一个小于

今天的学习就到这里,对您有帮助的话可以订阅一下专栏,内容持续更新奥

请添加图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤鱼不闲

一分钱也是爱!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值