关于algorithm里sort和lower_bound的使用
//在从小到大的排序数组中,
//lower_bound(begin, end, num):
//从数组的begin位置到end - 1位置二分查找第一个大于或等于num的数字
//找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin, 得到找到数字在数组中的下标。
//upper_bound(begin, end, num):
//从数组的begin位置到end - 1位置二分查找第一个大于num的数字
//找到返回该数字的地址,不存在则返回end
//通过返回的地址减去起始地址begin, 得到找到数字在数组中的下标。
代码示例
#include <iostream>
#include <algorithm> //使用sort函数以及lower_bound函数
using namespace std;
int main() {
int a[6] = { 1,5,5,8,7,9 };
sort(a, a + 6); //sort排序
for (int i = 0; i < 6; i++)
cout << a[i] << endl; //测试排序结果
int x;
while (cin >> x) { //遇文件结束符结束
int p = lower_bound(a, a + 6, x) - a; //在已排数组a中寻找x 注意减去起始地址得到整形数
if (a[p] == x) printf("%d found at %d\n", x, p + 1); //p + 1使得从1计数
else printf("%d not found\n", x);
}
return 0;
}
//在从小到大的排序数组中,
//lower_bound(begin, end, num):
//从数组的begin位置到end - 1位置二分查找第一个大于或等于num的数字
//找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin, 得到找到数字在数组中的下标。
//upper_bound(begin, end, num):
//从数组的begin位置到end - 1位置二分查找第一个大于num的数字
//找到返回该数字的地址,不存在则返回end
//通过返回的地址减去起始地址begin, 得到找到数字在数组中的下标。