前言
在以前遇到二分的题目都是手动实现二分,最近做题发现直接使用STL中的二分函数方便快捷还不会出错。
注意:使用二分函数前必须加上头文件#include<algorithm>
常用的二分函数有lower_bound()、upper_bound()、binary_search()
1.binary_search:查找目标值,若目标值存在则返回true,否则返回false
2.lower_bound:返回大于或等于目标值的第一个位置
3.upper_bound:返回大于目标值的第一个位置
三个函数的用法可参考sort()函数
都有三个参数:分别为数组的起始位置、数组的终止位置(取不到)以及要查找的目标值
/*注意因为lower_bound和upper_bound函数返回值是一个指针,所以减去数组的指针就是int变量了*/
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[6]= {1,2,3,3,5,6};
bool flag = binary_search(a,a+6,3); //找得到,返回值为true 1
bool flag1 = binary_search(a,a+6,4); //找不到,返回值为false 0
//lower_bound 和 upper_bound 需要减去数组的起始地址
int x = lower_bound(a,a+6,3) - a; //找的到,返回上界2
int x1 = upper_bound(a,a+6,3) - a; //找的到,返回第一个大于该值的地址4
cout << flag<<endl;
cout << flag1<<endl;
cout << x<<endl;
cout << x1<<endl;
return 0;
}