从头到尾,判断当前元素是否等于上一个元素,将不重复的元素移到前面来(赋值操作),而不是将重复的元素移动到后面去。
因为是判断当前元素是否等于上一个元素,所以要去重的容器必须是经过排序的有序容器。
返回的是第一个重复位置的迭代器
如何使用
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(4);
a.push_back(1);
a.push_back(3);
a.push_back(2);
a.push_back(3);
a.push_back(5);
sort(a.begin(),a.end());//先排序1123345
//删除重复的那部分
//unique之后a为1234513
//返回的是第二个1位置的迭代器
//erase之后a为12345
a.erase(unique(a.begin(),a.end()),a.end());
}
如何手动实现:
vector<int>::iterator unique(vector<int>&a)
{
int j=0;
for(int i=0;i<a.size();i++)
{
if(i==0||a[i]!=a[i-1])
{
a[j++]=a[i];
}
}
return a.begin()+j;
}