【C++ 二分函数——lower_bound & upper_bound用法】

发布于:2023-01-08 ⋅ 阅读:(430) ⋅ 点赞:(0)

大家好,我是Amy~

好久不见啊(主要是我太懒了,这几天比较忙,不想更新……再加上快开学了,我的作业还没有做完QAQ)你们的暑假作业都做完了吗(哦对,大佬不用做作业QAQ)

那今天我们就接着上次的binary_search函数来讲讲另外两个 “兄弟” 二分函数:lower_bound 和 upper_bound

lower_bound 和 upper_bound都是二分查找函数,为c++STL模板内的函数。比起手写二分,这些函数用起来会方便很多。


目录

二分思想

lower_bound函数

upper_bound函数

格式

区别


二分思想

对二分不熟悉的可以先看看我的这篇讲二分的文章:C++二分解释【初学者放心进,简单易懂】

知道什么是二分了,我们就可以开始了解这两个函数了

lower_bound函数

lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置(节选自lower_bound()函数用法_Anonymous-邦的博客-CSDN博客

简单来讲就是在一个区间中进行二分查找,返回第一个大于等于目标值的元素位置

测试代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[14]={1,2,2,3,4,4,4,4,5,6,7,9,9,10};
	cout<<lower_bound(a,a+14,4)<<endl;
	cout<<lower_bound(a,a+14,4)-a<<endl;
    return 0;
}

upper_bound函数

upper_bound也是二分查找函数,定义在 <algorithm> 头文件中,用于在区间内查找第一个大于目标值的元素位置

(博主太懒,加上能力有限,百度查不到想lower_bound一样专业的解释,就简单讲一下吧,用法和lower_bound类似)

测试代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[14]={1,2,2,3,4,4,4,4,5,6,7,9,9,10};
	cout<<upper_bound(a,a+14,4)<<endl;
	cout<<upper_bound(a,a+14,4)-a<<endl;
    return 0;
}

格式

这两个函数的格式一样,和sort都很相似

大概就是:函数名(start , end , val) ;

区别

这两个函数虽然是兄弟,用法也几乎一样,但是在功能上还是有些许区别的

upper_bound是查找区间内第一个大于目标值的元素位置,而lower_bound确实查找区间内第一个大于等于目标值的元素位置

(区别好像也不是特别大,就是一个“等于”之差哈)


那今天就到这里啦,感谢您的支持

我是Amy,下期再见吧,拜拜~

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到