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返回去重后最后一个元素的位置,而重复的元素都被移动到后面去了,所以要将从去重后最后一个元素的地址原数组最后一个地址 这些地址中的元素去掉,从而得到无重复元素的数组

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