C++ STL中的lower_bound与upper_bound函数基础使用

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章