Я пытался найти, содержит ли вектор дубликаты (пожалуйста, не предоставляйте алгоритм для проверки дубликатов). Я придумал это странное поведение.std :: unique для вектора 1,2,3,1 должен сделать его равным 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();
Фактический результат равен
nums1
4 4
Nums2
4 4
, но он должен был быть
nums1
4 3
Nums2
4 4