• STL中的unique()和lower_bound ,upper_bound


    unique():

    作用:unique()的作用是去掉容器中相邻元素的重复元素(数组可以是无序的,比如数组可以不是按从小到大或者从大到小的排列方式)

    使用方法:unique(初始地址,末地址);

    注意:

    1.unique()函数返回值不是去重后容器中元素的数量,而是去重后容器中的末地址。也就是说,如果想得到去重后容器中元素的数量的话还要减去初始地址。

    2.unique函数在去重的时候不会扔掉重复元素,而是会把它放在容器的末尾,也就是说数组的长度一直没有变化

    #include<bits/stdc++.h>
    using namespace std;
    #define forn(i,n) for(int i=0;i<n;i++)
    bool cmp(int a,int b){
        return a>b;
    }
    int main()
    {
        int n;cin>>n;
        int a[n+5];
        forn(i,n)cin>>a[i];
    
        sort(a,a+n,cmp);
        forn(i,n)cout<<a[i];cout<<endl;
    
        int m=unique(a,a+n)-a;
        cout<<m<<endl;
        return 0;
    }

     lower_bound,upper_bound

    lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。

    lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

    upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[5]={1,2,3,4,5};
    int main(){
        sort(a,a+5);
        int t1=lower_bound(a,a+5,3)-a;
        int t2=upper_bound(a,a+5,3)-a;
        cout<<t1<<endl;///返回的是地址
        cout<<t2<<endl;
        return 0; 
    }
    /*
    2
    3
    */
  • 相关阅读:
    [uoj276][清华集训2016]汽水——分数规划+点分治
    [bzoj3143][Hnoi2013]游走——动态规划+高斯消元
    TypeScript笔记八
    TypeScript笔记七
    TypeScript笔记六
    TypeScript笔记五
    TypeScript笔记四
    TypeScript笔记三
    TypeScript笔记二
    TypeScript笔记一
  • 原文地址:https://www.cnblogs.com/angelliu/p/13032128.html
Copyright © 2020-2023  润新知