STL中去重函数unique
一:unique(a.begin(),a.end());去重函数只是去掉连续的重复值,对于不连续的值没有影响,SO,在使用前一般需要进行排序处理;
二: vector<int>::iterator new_end=unique(a.begin(),a.end()); 函数返回值是一个指向新的结束位置的迭代器;
unique()函数原理如果两个连续的函数是重复的,则将第二个数用后边的不重复的数字进行覆盖,所以在unique处理之后还会在new_end和a.end() 中间存在数字,需要进行删除
简单处理的代码:
sort(a.begin(),a.end());//提前进行排序 a.erase(unique(a.begin(),a.end()),a.end());//去重并删除后边多余的数
示例:
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); int n,num; vector<int> a; cin>>n; for(int i=0;i<n;i++) { cin>>num; a.push_back(num); } sort(a.begin(),a.end()); a.erase(unique(a.begin(),a.end()),a.end()); cout<<a.size()<<endl; for(int i=0;i<a.size();i++) { cout<<a[i]; if(i<a.size()-1)cout<<' '; } return 0; }