数组去重 uniuqe 的使用

普通方法 :

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int b[maxn];
int main()
{
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n);
        b[0]=a[0];
        int k=0;
        for(int i=1;i<n;i++){
            if(a[i]!=a[i-1]){
                b[++k]=a[i];
            }
        }
        for(int i=0;i<=k;i++){
            cout<<b[i]<<" ";
        }
        puts("");
    }
    return 0;
}

使用unique:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int main()
{
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n);
        int ans=unique(a,a+n)-a;//unique为C++自带的去重函数,ans为去重后的数组的下标上限
        for(int i=0;i<ans;i++){
            cout<<a[i]<<" ";
        }
        puts("");
    }
    return 0;
}

unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序.

对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度

那它是怎么实现去重的呢?删除?

不是,它并没有将重复的元素删除,而是把重复的元素放到数组的最后面藏起来了

当把原长度的数组整个输出来就会发现:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int main()
{
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n);
        int k=unique(a,a+n)-a;
        for(int i=0;i<n;i++){
            cout<<a[i]<<" ";
        }
        puts("");
    }
    return 0;
}

上述代码就是去重后再把原数组输出,测试一下看看结果就懂了

具体的点击这个 

猜你喜欢

转载自blog.csdn.net/VP_Death_Note/article/details/81904306