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?如果唯一的地址(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个要素。