摘要:
如:a[n]={0,1,2,3,4,5};
1,
lower_bound(a,a+n,val)可以返回第一个大于等于val的指针,否者返回a+n的指针,--------否者返回a+n的指针
lower_bound(a,a+n,val)-a则等于第一个大于等于val的下标,--------否者返回n
2,
upper_bound(a,a+n,val)可以返回第一个大于val的指针,否者返回a+n的指针,--------否者返回a+n的指针
upper_bound(a,a+n,val)-a则等于第一个大于val的下标,--------否者返回n
摘要:
如:a[n]={5,4,3,2,1,0};
1,
lower_bound(a,a+n,val,greater< int >())可以返回第一个小于等于val的指针,--------否者返回a+n的指针
lower_bound(a,a+n,val,greater< int >())-a则等于第一个小于等于val的下标,--------否者返回n
2,
upper_bound(a,a+n,val,greater< int >())可以返回第一个小于val的指针,--------否者返回a+n的指针
upper_bound(a,a+n,val,greater< int >())-a则等于第一个小于val的下标,--------否者返回n
切记 :
升序不能加greater< int >()
降序必须加greater< int >()
不然会出现非常奇怪的错误
具体错误原因可参考:错误原因
lower_bound(a,a+n,val,cmp)
不早了,老夫先睡了,懒,不想写了有时间再补充
#include
#include
using namespace std;
int a[10]={
0,4,5,6,6,6,7,8,8,9};
int main(){
int tem;
tem=lower_bound(a,a+10, 9 )-a;
cout<<tem<<endl;// 9
tem=lower_bound(a,a+10, 8 )-a;
cout<<tem<<endl;// 7
tem=lower_bound(a,a+10, 7 )-a;
cout<<tem<<endl;// 6
tem=lower_bound(a,a+10, 6 )-a;
cout<<tem<<endl;// 3
tem=lower_bound(a,a+10, 5 )-a;
cout<<tem<<endl;// 2
tem=lower_bound(a,a+10, 4 )-a;
cout<<tem<<endl;// 1
tem=lower_bound(a,a+10, 0 )-a;
cout<<tem<<endl;// 0
//lower_bound(a,a+n,val)可以返回第一个大于等于val的指针
//lower_bound(a,a+n,val)-a则等于第一个大于等于val的下标
//**********************************************//
cout<<endl;
tem=upper_bound(a,a+10, 9 )-a;
cout<<tem<<endl;// 10
tem=upper_bound(a,a+10, 8 )-a;
cout<<tem<<endl;// 9
tem=upper_bound(a,a+10, 7 )-a;
cout<<tem<<endl;// 7
tem=upper_bound(a,a+10, 6 )-a;
cout<<tem<<endl;// 6
tem=upper_bound(a,a+10, 5 )-a;
cout<<tem<<endl;// 3
tem=upper_bound(a,a+10, 4 )-a;
cout<<tem<<endl;// 2
tem=upper_bound(a,a+10, 0 )-a;
cout<<tem<<endl;// 1
//upper_bound(a,a+n,val)可以返回第一个大于val的指针
//upper_bound(a,a+n,val)-a则等于第一个大于val的下标
return 0;
}
#include
#include
using namespace std;
int a[10]={
9,8,8,7,6,6,6,5,4,0};
int main(){
int tem;
tem=lower_bound(a,a+10, 9 ,greater<int>())-a;
cout<<tem<<endl;// 0
tem=lower_bound(a,a+10, 8 ,greater<int>())-a;
cout<<tem<<endl;// 1
tem=lower_bound(a,a+10, 7 ,greater<int>())-a;
cout<<tem<<endl;// 3
tem=lower_bound(a,a+10, 6 ,greater<int>())-a;
cout<<tem<<endl;// 4
tem=lower_bound(a,a+10, 5 ,greater<int>())-a;
cout<<tem<<endl;// 7
tem=lower_bound(a,a+10, 4 ,greater<int>())-a;
cout<<tem<<endl;// 8
tem=lower_bound(a,a+10, 0 ,greater<int>())-a;
cout<<tem<<endl;// 9
//lower_bound(a,a+n,val,greater< int >())可以返回第一个小于等于val的指针
//lower_bound(a,a+n,val,greater< int >())-a则等于第一个小于等于val的下标
//**********************************************//
cout<<endl;
tem=upper_bound(a,a+10, 9 ,greater<int>())-a;
cout<<tem<<endl;// 1
tem=upper_bound(a,a+10, 8 ,greater<int>())-a;
cout<<tem<<endl;// 3
tem=upper_bound(a,a+10, 7 ,greater<int>())-a;
cout<<tem<<endl;// 4
tem=upper_bound(a,a+10, 6 ,greater<int>())-a;
cout<<tem<<endl;// 7
tem=upper_bound(a,a+10, 5 ,greater<int>())-a;
cout<<tem<<endl;// 8
tem=upper_bound(a,a+10, 4 ,greater<int>())-a;
cout<<tem<<endl;// 9
tem=upper_bound(a,a+10, 0 ,greater<int>())-a;
cout<<tem<<endl;// 10
//upper_bound(a,a+n,val,greater< int >())可以返回第一个小于val的指针
//upper_bound(a,a+n,val,greater< int >())-a则等于第一个小于val的下标
return 0;
}
蒟蒻见解,欢迎更改