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;
    }
    说明,要查找的有序序列必须是合法的,已经被排序的序列。
  • 相关阅读:
    iOS 开发--NSMutableArray使用枚举方法
    IOS开发中的几种设计模式
    iOS开发--提交github代码
    iOS开发--CornerStone上传静态库(.a文件)
    iOS开发swift--函数
    iOS开发--自动布局
    iOS开发--邮箱,电话号码,身份证正则表达式验证
    Redis学习笔记~实现消息队列比MSMQ更方便
    WebApi系列~基于RESTful标准的Web Api
    推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10395527.html
Copyright © 2011-2022 走看看