unique是用来去掉容器中重复的元素
iterator unique(iterator it_1,iterator it_2);
但是他去掉的原理是把不重复的元素移到前面来,而最后的元素不改变值
如:
原始:1 1 2 2 3 3
结果:1 2 3 2 3 3
注意:
使用unique前要先排序
sort(it_1,it_2);
下面的代码由于本来就是有序的,所以就不排序了
实例代码:
int main()
{
vector<int> a = {1,3,3,4,5,6,6,7};
vector<int>::iterator it_1 = a.begin();
vector<int>::iterator it_2 = a.end();
cout<<"去重前的 a : ";
for(int i = 0 ; i < a.size(); i++)
cout<<a[i];
cout<<endl;
unique(it_1,it_2);
cout<<"去重后的 a : ";
for(int i = 0 ; i < a.size(); i++)
cout<<a[i];
cout<<endl;
}
结果:
去重前的 a : 13345667
去重后的 a : 13456767
删除容器后面多余的元素
由于unique返回值是一个迭代器,这个迭代器指向的是去重后容器中不重复序列的最后一个元素的下一个元素。
int main()
{
vector<int> a = {1,3,3,4,5,6,6,7};
vector<int>::iterator it_1 = a.begin();
vector<int>::iterator it_2 = a.end();
cout<<"去重前的 a : ";
for(int i = 0 ; i < a.size(); i++)
cout<<a[i];
cout<<endl;
vector<int>::iterator new_end = unique(it_1,it_2);
a.erase(new_end, a.end()); //删除(真正的删除)重复的元素
cout<<"去重后的 a : ";
for(int i = 0 ; i < a.size(); i++)
cout<<a[i];
cout<<endl;
}
结果:
去重前的 a : 13345667
去重后的 a : 134567