zoukankan      html  css  js  c++  java
  • lower_bound

    头文件:

    #include<algorithm>

    作用:

    查找第一个大于或等于给定数的元素或位置

    在从小到大的排列数组中

    注意注意:

      是排列好的,

      一般都是从小到大,

      但从大到小也可以,

      只不过做法与常规的从小到大的不太一样

    查找有序区间中第一个大于或等于某给定值的元素的位置

    其中排序规则可以通过二元关系来表示

    代码举例:

    1.针对容器

    (1).得到具体的元素

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 1;i < 4;i++)
            v.push_back(2 * i);//注意:此时v中的元素本身就是有序的
        vector<int>::iterator it = lower_bound(v.begin(),v.end(),3);
        printf("%d
    ",*it);
        return 0; 
    }

    (2).得到位置

    用到了指针偏移的技巧,只需要前去起始位置的指针即可

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 1;i < 4;i++)
            v.push_back(i * 2);//注意:此时v中的元素本身就是有序的 
        int pos = lower_bound(v.begin(),v.end(),3) - v.begin();
        printf("%d
    ",pos);
        return 0;
    }
    这时候返回pos就是所查找元素的位置,下标,
    这里查找到的元素应该是4在容器中的下标是1,
    所以输出pos的结果就是1


    2.针对数组

    返回元素

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int a[4] = {2,4,6,8};
        int *it = lower_bound(a,a+4,3);
        printf("%d
    ",*it);
        return 0;
    }

    返回位置

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int a[4] = {2,4,6,8};//注意:初始化中的元素本身就是有序的
        int pos = lower_bound(a,a+4,3)-a;
        printf("%d
    ",pos);
        return 0; 
     } 

    以上都是针对从小到大排列好的

    ------------------------------------------------------------------------------------------------------------------------

    下面是从大到小排列好的

    函数

      greater<int>()

    头文件
      #include<functional>

    假如说像上边一样元素为2 4 6 8,

    逆序则是8 6 4 2,

    那么求距离3最近表示的是与3最近的小于等于3的元素,

    输出结果则是元素2了,

    代码如下:

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<functional>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 4;i > 0;i--)
            v.push_back(i * 2);
        vector<int>::iterator it = lower_bound(v.begin(),v.end(),3,greater<int>());
        printf("%d
    ",*it);
        return 0;
    }
    说明,要查找的有序序列必须是合法的,已经被排序的序列。
  • 相关阅读:
    自定义打包工具对应的解析代码
    自定义的打包工具源码
    一种C语言实现面向对象特性的继承,多态
    buffers和cached的区别
    初识rt-thread杂记
    一种多叉树的实现,提供树形结构打印,树转表输出等功能
    关于rtsp的时间戳问题
    一种基于状态机(表)的小组件
    一种基于消息发布-订阅的观察者模式实现
    命令解析类代码重构
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10395527.html
Copyright © 2011-2022 走看看