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,不是吗?
答案 0 :(得分:7)
std::unique
执行此操作:
从范围[first,last)的每个连续等效元素组中消除除第一个元素外的所有元素,并为该范围的新逻辑端返回一个end-the-end迭代器。
换句话说,从nums.begin()
的返回值中减去unique(nums.begin(), nums.end())
所得到的值是列表执行删除连续重复项的操作后的长度。您的向量中没有任何连续的重复项,我们有:1,3,6,10,12。
这是5个元素。