首先附上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返回去重後最後一個元素的位置,而重複的元素都被移動到後面去了,所以要將從去重後最後一個元素的地址 到 原數組最後一個地址 這些地址中的元素去掉,從而得到無重複元素的數組