lower_bound和upper_bound是二分查找法的一大应用
头文件 : #include < algorithm >
复杂度 : log(n)
注意事项 : 使用的数组必须有序,否则会发生逻辑上的错误
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/*
lower_bound:
找到数组a中第一个大于等于x值的元素的地址
lower_bound(a,a+n,x);
第一个参数是要查找的数组的首地址,并非一定是要起始地址,vector使用时比较灵活,通过加减来控制
第二个参数是要查找的数组的末地址
第三个参数是要查找的元素
减去数组首地址得到下标
upper_bound:
找到数组a中第一个大于x值的元素的地址
upper_bound(a,a+n,x);
*/
int main()
{
vector<int> vec;
for( int i = 1 ; i < 10 ; i++ )
{
vec.push_back(i);
}
int x=3;
cout << vec[lower_bound(vec.begin(),vec.end(),x)-vec.begin()] << endl;
cout << vec[upper_bound(vec.begin(),vec.end(),x)-vec.begin()] << endl;
return 0;
}