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






