首先附上leetcode 349题中unique的应用
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
// int *last;
// auto end_unique=unique(nums1.begin(),nums1.end());
// nums1.erase(end_unique,nums1.end());
// auto end_unique_1=unique(nums2.begin(),nums2.end());
// nums2.erase(end_unique_1,nums2.end());
// last = set_intersection(nums1, nums1+nums1.size(),
// nums2, nums2+nums2.size(),
// result) ;
//
//v1,v2插入数据,v1,v2的数据有不同的有相同的
/////
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),back_inserter(result));//求交集
auto end_unique=unique(result.begin(),result.end());
result.erase(end_unique,result.end());
return result;
}
};
在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。
sort,unique和erase的联合使用,可以将一个有重复元素的数组的重复元素去除,从而转化成一个无重复元素的数组
end_unique=unique(result.begin(),result.end());
result.erase(end_unique,result.end());
由于 end_unique返回去重后最后一个元素的位置,而重复的元素都被移动到后面去了,所以要将从去重后最后一个元素的地址 到 原数组最后一个地址 这些地址中的元素去掉,从而得到无重复元素的数组