zoukankan      html  css  js  c++  java
  • STL入门--sort,lower_bound,upper_bound,binary_search及常见错误

    首先,先定义数组

    int a[10];

    这是今天的主角.

    这四个函数都是在数组上操作的

    注意要包含头文件

    #include<algorithm>

    sort:

    sort(a,a+10)

    对十个元素进行排序,顺序为从小到大.

        sort(a,a+10);
        for(int i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }

    自定义sort

    sort (a,a+10,Rule());

    按照Rule给定的规则进行排序.

    Rule函数的写法:(以比较个位数字为例)

     

        struct Rule
        {
            bool operator()(const int &a,const int &b)
            {
                return a%10>b%10;
            }
        };

    注意,这个要写在开头,main外面

    binary_search

    首先需要注意,是下划线,不要写错.

    binary_search(a,a+10,7,排序规则)//以查找数字7为例

    可以没有排序规则,也就是

    binary_search(a,a+10,7)//查找数字7

    但是,在查找之前,一定要注意要先排好序.也就是用一下sort.

    sort  binary_search的排序规则应保持一致

    还有就是binary_search 返回的是 个数.

    没有查找到的返回零,

    所以可以用来做函数的返回值.

    代码:

    查找615的个数

    1     int b=    binary_search(a,a+10,615);
    2     printf("%d",b);
    3     printf("
    ");
    4     int bb=    binary_search(a,a+10,615,Rule());
    5     printf("%d",bb);
    6     printf("
    ");

    lower_bound查找区间下标最小的且大于等于值的元素的地址

    upper_bound查找区间下标最小的且大于值的元素的地址

        int *p1,*p2;
        p1=lower_bound(a,a+10,15);
        printf("%d %d
    ",a[p1-a],p1-a);
        p2=upper_bound(a,a+10,15);
        printf("%d %d
    ",a[p2-a],p2-a);
        

    注意:

    p1-a是指其所在的下标

    问题:

    注意,只要用了sort,数组里的元素顺序就会改变,而查找必须是在对应的排序下的.所以在进行完一次查找时,需要进行下一次查找之前,要在进行一次需要规则的排序.

    记住,它顺序在改变!!

  • 相关阅读:
    梦断代码阅读笔记02---Agenda之魂
    学习进度条(第十一周)
    冲刺第五天
    冲刺第四天
    典型用户和用户场景分析
    冲刺第三天
    冲刺第二天
    冲刺第一天
    2016huasacm暑假集训训练三 D
    2016huasacm暑假集训训练三 C
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/12316028.html
Copyright © 2011-2022 走看看