1、distance与unique都是STL中的函数,使用时需引入头文件#include //STL 通用算法
2、例题
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
return distance(nums.begin(),unique(nums.begin(),nums.end()));
}
};
3、思考
1)nums.begin()返回的是迭代器(迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。)
2)distance() 函数用于计算两个迭代器表示的范围内包含元素的个数
3)unique()unique的作用unique函数的去重过程实际上就是不停的把后面不重复的元素移到前面来,也可以说是用不重复的元素占领重复元素的位置,如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<int>nums = { 1,1,2 };
cout << "1、vector的内容为:" << endl;//无法直接输出
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << '\t';
}
cout << endl;
cout<<"2、去重之后的元素个数" << distance(nums.begin(),unique(nums.begin(),nums.end())) << endl;
cout << "3、此时数组情况:" << endl;
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << '\t';
}
return 1;
}
/*
返回结果:
1、vector的内容为:
1 1 2
2、去重之后的元素个数2
3、此时数组情况:
1 2 2
*/
unique函数的执行过程类似下面这个函数
iterator My_Unique (iterator first, iterator last)
{
if (first==last) return last;
iterator result = first;
while (++first != last)
{
if (!(*result == *first))
*(++result)=*first;
}
return ++result;
}