无法理解其工作原理?

时间:2019-02-01 21:44:03

标签: c++ pointers

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

我们怎么得到5?如果unique(nums.begin(),nums.end())的地址为0x7ffebffb288且nums.begin()的地址为0x7ffebffb2850?

必须为8,不是吗?

1 个答案:

答案 0 :(得分:7)

std::unique执行此操作:

  

从范围[first,last)的每个连续等效元素组中消除除第一个元素外的所有元素,并为该范围的新逻辑端返回一个end-the-end迭代器。

换句话说,从nums.begin()的返回值中减去unique(nums.begin(), nums.end())所得到的值是列表执行删除连续重复项的操作后的长度。您的向量中没有任何连续的重复项,我们有:1,3,6,10,12。

这是5个元素。