lower_bound()
首先给出使用方法。
int index = lower_bound(num.begin(),num.end(),val)-num.begin();
函数有三个参数,前两个分别是查找数组的首地址与尾地址,第三个参数是要查找的值。
函数返回一个指针,需要减去数组首地址,计算指针相对首地址的偏移量,即是在数组中有
k
k
k个值小于
v
a
l
val
val。换句话说就是num[0] ~ num[k-1]均是小于val的值,num[k]~num[num.end()-1]均是大于等于val的值。
函数的功能:在一个数组
n
u
m
num
num中查找小于
v
a
l
val
val的数的个数。
upper_bound()
同样先给出使用方法。
int index = upper_bound(num.begin(),num.end(),val)-num.begin();
函数有三个参数,前两个分别是查找数组的首地址与尾地址,第三个参数是要查找的值。
函数返回一个指针,需要减去数组首地址,计算指针相对首地址的偏移量,即是在数组中有
k
k
k个值小于等于
v
a
l
val
val。换句话说就是num[0] ~ num[k-1]均是小于等于val的值,num[k]~num[num.end()-1]均是大于val的值。
函数的功能:在一个数组
n
u
m
num
num中查找小于等于
v
a
l
val
val的数的个数。
应用:计算数组中等于某一个值val的个数
可以使用lower_bound()求出小于 v a l val val的个数,然后使用upper_bound()求出小于等于 v a l val val的个数,然后二者相减即是等于 v a l val val值的个数。代码如下:
int L = lower_bound(num.begin(),num.end(),val)-num.begin();
int R = upper_bound(num.begin(),num.end(),val)-num.begin();
int cnt = R-L;//此式可化简为下式
int cnt = upper_bound(num.begin(),num.end(),val)-lower_bound(num.begin(),num.end(),val);