lower_bound函数原型:
template<classForwardIterator,classT>
ForwardIterator lower_bound(ForwardIteratorfirst,ForwardIteratorlast,constT&val);
返回非递减序列(first,last)中第一个大于等于val的元素位置。
upper_bound函数原型:
template<classForwardIterator,classT>
ForwardIterator upper_bound(ForwardIteratorfirst,ForwardIteratorlast,constT&val);
返回非递减序列(first,last)中第一个大于val的元素位置。
例如序列:1,2,3,3,3,4,5
对于val=3,lower_bound(3)返回位置2,upper_bound(3)返回位置5。相减获得元素值为val的元素个数。
lower_bound
int lower_bound(int *array,int size, int val)
{
int first,middle,half,len;
first=0;
len=size;
while(len>0)
{
half=len>>1;
middle=first+half;
if(array[middle]<key)
{
first=middle+1;
len=len-half-1;
}
else
len=half;
}
return first;
}
upper_bound
int upper_bound(int *array,int size, int val)
{
int first,middle,half,len;
first=0;
len=size;
while(len>0)
{
half=len>>1;
middle=first+half;
if(array[middle]>key)
len=half;
else
{
first=middle+1;
len=len-half-1;
}
}
return first;
}