徒手实现lower_bound和upper_bound
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; } }