C++學習筆記—unique及erase的聯合運用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章