zoukankan      html  css  js  c++  java
  • 二分函数 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() 一样。

    现在所有的不幸都是以前不努力造成的。。。
  • 相关阅读:
    super与this的比较
    队列学习小结
    最左原则
    show processlist
    循环
    打印偶数
    发布模块
    eval函数
    文件
    模块
  • 原文地址:https://www.cnblogs.com/shuizhidao/p/9402127.html
Copyright © 2011-2022 走看看