二分函数 lower_bound()

这篇博客说是STL源码。。。。

https://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html

头文件 algorithm

1、lower_bound()

沿用百度百科,这个函数有两个版本可用,lower_bound(*array, len, key), lower_bound(*array, len, key, cmp)

  • 第一个函数函数查找的是,在左闭右开的区间内,第一个大于或等于 key 的数,返回值是该值的地址!
  • 第二个函数就后面加了个自定义比较函数

所以一般用这个函数的时候要先排序,自己可以试试不排序。

 

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int a[1005], n;
    cin >> n;
    for(int i = 0;i < n;++i)
        cin >> a[i];
    sort(a, a + n);

    int num;
    while(cin >> num && num)
    {
        int *it = lower_bound(a, a + n, num);
        cout << "地址 " << it << endl;
        cout << "位置 " << it - a + 1 << endl;
        if(it - a - n)
            cout << "" << *it << endl;
        //这里看了一些代码都没有判断,做题可能错
        else
            cout << "不存在" << endl;
    }
    return 0;
}

 

输入

6
4 6 2 10 8 12
5

15

输出

地址 0x6d62ac
位置 3
值 6

地址 0x6d62bc
位置 7
不存在

结构体的不会写。。。。。

 

2、upper_bound()

  这个的算的是第一个大于 key 的数。。。没了???是的,这就完了,用法跟 lower_bound() 一样。

 

posted @ 2018-08-01 16:40  谁知道你啊啊啊  阅读(577)  评论(0编辑  收藏  举报