本来在网上一直搜索关于erase函数,但是居然没有找到如何删除连续重复的数字,所以自己调试后,发现it和i都需要进行前移才能避免漏判,如果大家有更好的想法,欢迎在评论区指教。
知识点:在vector中因为vector是顺序存储,所以,一旦删除一个元素,之前获得的迭代器就会失效了,vector.begin()和vector.end()是变化的。注意到,erase的返回值是一个迭代器,而这个迭代器就是指向删除之前元素后的第一个元素。
//求交集函数
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
if(nums1.size() == 0 || nums2.size() == 0) //空数组处理
return res;
int i = 0,j = 0;
SortDupre(nums1);
SortDupre(nums2);
for(i = 0; i < nums1.size(); i++)
{
for(j = 0; j < nums2.size(); j++)
{
if(nums1[i] < nums2[j]) //跳出内层循环
break;
else if(nums1[i] == nums2[j]) //交集
{
res.push_back(nums1[i]); //存入res容器
break;
}
}
}
return res; //返回结果
}
//铺垫代码
//删除等于元素k的值
/* for (it = nums.begin(); it != nums.end();)
{
if (*it == k) //判断等于k
it = veci.erase(it); //地址赋予
else
++it;
}*/
//与python中的set函数功能类似
void SortDupre(vector<int>& nums)
{
int i; //计数变量
sort(nums.begin(),nums.end()); // 排序
vector<int>::iterator it = nums.begin(); //赋予初始地址
//去重循环
for(i = 0; it < nums.end() - 1; i++)
{
if(nums[i] == nums[i + 1]) //前后数字相等
{
it = nums.erase(it); //移除当前的it并重新赋给it
it--; //it前移
i--; //i迁移
}
++it; //向后指
}
}