upper_bound和lower_bound的相关用法及其误区

本文介绍了C++中upper_bound和lower_bound函数的使用方法,重点强调了这两个函数需应用于有序升序数组。内容包括:1) 函数要求数组必须有序且升序;2) 函数原理基于二分查找;3) lower_bound返回的是大于等于指定数的元素位置;4) 对于降序数组,需重载比较器。同时,推荐了greater<>()和less<>()作为比较函数的替代选择。

头文件:#include
upper_bound用于返回有序数组中第一个比指定数的数的指针
lower_bound用于返回有序数组中打一个大于等于指定数的数的指针
函数内部的实现是通过二分查找(不有序的话边界会出问题,且放回来的值无厘头)
对于指针,减掉其数组名便可以得到指定数在数组中的位置。
好了,开始进入正题
如所见,黑体字所标皆为重点,
1.数组必须为有序且为升序,如果是降序就会发生莫名其妙的错误,当然如果是无序的话返回来的值也是错误的。
2.函数的写法和sort的写法十分相似。
3.不要被函数名所骗,lower_bound是大于等于
这时候可能有人会说,数组就不能是降序的吗,其实也可以,不过你要稍微改写下算法了,及得要重载下函数了,函数默认的比较器是**’<’,
如果是降序的数组要返回第一个小于等于指定数,就要将比较器改写成’>’,(没错,就当函数是瞎子,嘿嘿)
接下来为
懒人**(如本人)介绍两个比较函数,一个是greater<类型>(),另一个则是less<类型>(),前者是’>'的比较函数,后者相反。
接下来上代码:

#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int q[9]={8,6,5,4,4,3,2,1};
int main()
{
	cout<<*lower_bound(q,q+9,4,greater<int>());//输出4
	cout<<endl;
	cout<<*upper_bound(q,q+9,4,greater<int>());//输出3
}

简单易懂对吧

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值