upper_bound()和lower_bound()在STL常用,配合起STL能大幅度减少代码量,因为upper_bound()和lower_bound()本身就是二分的一个集合函数,upper_bound()作用为返回一个数组中大于某个值的地址,lower_bound()作用为返回一个数组中大于等于某个值的地址,值得注意的是他们都返回的是地址,返回的是地址看起来很复杂,但减去数组首地址+1即可得到该数在数组中的位置,即使不减首地址,使用迭代器iterator一样能取出该值。

下面演示下如何使用upper_bound()和lower_bound():

普通数组:

返回在数组a中大于cnt的地址:upper_bound(a,a+n,cnt)

返回在数组a中大于等于cnt的地址:lower_bound(a,a+n,cnt)

返回在数组a中大于cnt的位置:(upper_bound(a,a+n,cnt)-a)+1

返回在数组a中大于等于cnt的位置:(lower_bound(a,a+n,cnt)-a)+1

vector:

返回在数组a中大于cnt的地址:upper_bound(v.begin(),v.end(),cnt)

返回在数组a中大于等于cnt的地址:lower_bound(v.begin(),v.end(),cnt)

返回在数组a中大于cnt的位置:(upper_bound(v.begin(),v.end(),cnt)-a)+1

返回在数组a中大于等于cnt的位置:(lower_bound(v.begin(),v.end(),cnt)-a)+1