lower_bound和upper_bound
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; }