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,数组里的元素顺序就会改变,而查找必须是在对应的排序下的.所以在进行完一次查找时,需要进行下一次查找之前,要在进行一次需要规则的排序.

记住,它顺序在改变!!

原文地址:https://www.cnblogs.com/zhmlzhml/p/12316028.html