STL中lower_bound和upper_bound的使用方法:STL 二分查找
lower_bound:
int obj=3;
int l=0; //初始化 l ,为第一个合法地址
int r=10; //初始化 r , 地址的结束地址
int mid;
while(l<r) {
mid=(l+r)/2;
if(arr[mid]<obj){
l=mid+1;
}else{
r=mid;
}
}
upper_bound:
int obj=3;
int l=0; //初始化 l ,为第一个合法地址
int r=10; //初始化 r , 地址的结束地址
int mid;
while(l<r) {
mid=(l+r)/2;
if(arr[mid]<=obj){
l=mid+1;
}else{
r=mid;
}
}
(将上文的lower_bound的 < 替换为 <= 即可)
为便于记忆可以修改判断条件。
lower_bound:
int l=0; //初始化 l ,为第一个合法地址
int r=10; //初始化 r , 地址的结束地址
int mid;
while(l<r) {
mid=(l+r)/2;
if(arr[mid]>=obj){
r=mid;
}else{
l=mid+1;
}
}
upper_bound:
int l=0; //初始化 l ,为第一个合法地址
int r=10; //初始化 r , 地址的结束地址
int mid;
while(l<r) {
mid=(l+r)/2;
if(arr[mid]>obj){
r=mid;
}else{
l=mid+1;
}
}