1. 引用
#include< algorithm>
2.前提
这个区间必须是有序的,即提前从小到大排过序,通常使用时会先sort一下
3.作用
lower_bound 可以在一个区间中二分查找,返回指向第一个大于等于 x 的元素位置的指针(或迭代器)
upper_bound 可以在一个区间中二分查找,返回指向第一个大于 的元素位置的指针(或迭代器)
lower_bound与upper_bound的区别距离
int a[4]={0,1,2,3};
int k=lower_bound(a,a+4,1)-a; //第一个大于等于 x 的元素位置
此时k的值为1,因为数组是从0开始算的,1=1,且位于第二个元素
而 int k=upper_bound(a,a+4,1)-a;//第一个大于 x 的元素位置
此时k的值为2;
4.使用
lower_bound(首指针,尾指针,x);
但一般使用的时候是求数组下标
lower_bound(首指针,尾指针,x)-首指针;
//数组a,长度为n,k为第一个大于等于x的元素位置的下标
int k=lower_bound(a,a+n,x)-a;
//若数组a是不定数组vector<int>a;
int k=lower_bound(a.begin(),a.end(),x)-a.begin();
upper_bound(首指针,尾指针,x);
但一般使用的时候是求数组下标
upper_bound(首指针,尾指针,x)-首指针;
//数组a,长度为n,k为第一个大于x的元素位置的下标
int k=upper_bound(a,a+n,x)-a;
//若数组a是不定数组vector<int>a;
int k=upper_bound(a.begin(),a.end(),x)-a.begin();