我试图查找向量是否包含重复项(请不要提供检查重复项的算法。)我想到了这种奇怪的行为。向量1,2,3,1上的std :: unique应该使其1,2,3,1返回迭代器为1,但擦除迭代器返回到vector.end()时,我得到了与我是原始向量。这是描述上述行为的代码片段(可在ideone上获得)
vector<int> nums2 = {1,2,3,4};
vector<int> nums = {1,2,3,1};
cout << "nums1" << endl;
vector<int> a(nums.begin(), nums.end());
auto ip = unique(nums.begin(), nums.begin()+nums.size());
nums.resize( std::distance(nums.begin(),ip) );
cout << a.size() << " " << nums.size() << endl;
cout << "Nums2" << endl;
vector<int> a2(nums2.begin(), nums2.end());
auto ip2 = unique(nums2.begin(), nums2.begin()+nums2.size());
nums.resize( std::distance(nums2.begin(),ip2) );
cout << a2.size() << " " << nums2.size();
Run Code Online (Sandbox Code Playgroud)
实际输出为
nums1
4 4
Nums2
4 4
Run Code Online (Sandbox Code Playgroud)
但这应该是
nums1
4 3
Nums2
4 4
Run Code Online (Sandbox Code Playgroud)
std::unique仅删除连续的重复项。从cppreference.com上std::unique:
从范围[first,last)的每个连续等效元素组中消除除第一个元素外的所有元素,并为该范围的新逻辑末尾返回一个post-the-end迭代器。
您的1不连续,因此不会被删除。这是预期的行为。一个快速的解决方案是首先到达std::sort您的范围。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |