vector <int> nums = {1, 1, 3, 3, 6, 10, 12, 12};
auto element = unique(nums.begin(), nums.end());
auto begin = nums.begin();
int result = element - begin;
cout << *element << endl; //10
cout << *begin << endl; //1
cout << el << endl; //5 unique numbers in the vector
cout << &element << endl;//0x7fffb577ed88
cout << &begin << endl; //0x7fffb577ed90
Run Code Online (Sandbox Code Playgroud)
我们怎么得到5?如果唯一的地址(nums.begin(),nums.end())是0x7ffebffb288,地址是nums.begin()= 0x7ffebffb2850?
一定是8,一定不是吗?
std::unique 做这个:
从[first,last]范围中的每个连续的等效元素组中消除除第一个元素之外的所有元素,并返回该范围的新逻辑结尾的过去的迭代器.
换句话说,通过nums.begin()从返回值中减去得到的值unique(nums.begin(), nums.end())是在执行删除连续重复的操作之后列表的长度.在矢量中没有任何连续重复,我们有:1,3,6,10,12.
这是5个要素.