lower_bound( ) 与 upper_bound( )
lower_bound( ) 与 upper_bound( )
这两个函数是用二分查找的方式,在一个排好序的数组中进行查找,返回值是地址。
如果数组为从小到大的顺序排列的话:
-
lower_bound :lower_bound( begin,end,num),在begin到end-1之间,二分查找第一个大于或等于num的数字,不存在返回end
-
upper_bound :upper_bound( begin,end,num),在begin到end-1之间,二分查找第一个大于num的数字,不存在返回end
如果数组为从大到小的顺序排列的话,则需要重载:
- lower_bound ( begin,end,num,greater
() ),在begin到end-1之间二分查找第一个小于或等于num的数字,不存在返回end - upper_bound ( begin,end,num,greater
() ),在begin到end-1之间二分查找第一个小于或等于num的数字,不存在返回end
因为返回值是地址,所以一般再减去begin,获得要寻找的数字的下标
int pos = lower_bound ( arr , arr + length , num ) -arr ;