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;
}
本文详细介绍了C++中的lower_bound和upper_bound函数的原理、原型、用法,并通过示例代码展示了如何实现这两个函数。重点讲解了它们在非递减序列中的应用,包括查找第一个大于等于指定值的元素和查找第一个大于指定值的元素的位置。
9万+

被折叠的 条评论
为什么被折叠?



