lower_bound()和upper_bound()

虽然说知道这两个东西但是每次用的时候都要查一下,

利用二分查找的方法在一个排好序的数组中进行查找

从小到大的排序数组中

lower_bound(begin,end,num):

从数组的begin位置到end-1的位置二分查找  第一个 大于或等于num的 数字,找到返回该数字的地址,不存在则返回end.

通过返回的地址减去起始地址begin,得到找到数字在数组中的下标

比如 pos=low_bound(num,num+7,x)-num;

upper_bound(beginmend,num):

从数组的begin位置到end-1的位置二分查找  第一个 大于num的 数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标

从大到小的排序数组中

lower_bound( begin,end,num,greater<type>() ):

从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

greater<type> 内置类型的由大到小排序

upper_bound( begin,end,num,greater<type>() ):

从数组的begin位置到end-1位置二分查找第一个小于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
 

猜你喜欢

转载自blog.csdn.net/qq_40916491/article/details/85288596