一个无序且含重复元素的数组,我们经常需要通过去除重复元素来完成我们需要完成的事。
那么在stl中,我们一般如何完成呢?
输入
10
1 0 0 4 3 2 5 5 1 1
代码如下
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int>arr;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
arr.push_back(x);
}
sort(arr.begin(),arr.end());
for(int i=0;i<n;i++)cout<<arr[i]<<' ';
cout<<endl;
unique(arr.begin(),arr.end());
for(int i=0;i<n;i++)cout<<arr[i]<<' ';
cout<<endl;
sort(arr.begin(),arr.end());
arr.erase(unique(arr.begin(),arr.end()),arr.end());
for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
cout<<endl;
}
如输出所示,首先给数组排序,然后使用unique函数,去重,发现前半段是不重复元素,后半段事重复元素,且是重复元素中随机的,并不是前面的重复元素,最后再排序,进行去重处理,得到一个不重复且单调的数组。