我正在使用More elegant way to check for duplicates in C++ array?中提供的算法来打印重复元素。
-
我在 #include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
/*Complexity: O(n log n). You sort once, then you iterate once*/
void function_1(std::vector<int> t)
{
cout << "The duplicate elements are: \n";
std::sort(t.begin(), t.end());
for(int i = 0; i < t.size() - 1; i++)
{
if (t[i] == t[i + 1])
{
t.erase(t.at(i));
i--;
}
}
}
int main()
{
std::vector<int> test{1,2,1,3,2,4};
function_1(test);
return 0;
}
t.erase(t.at(i));
我不明白为什么我会遇到上述错误。
谢谢
答案 0 :(得分:4)
@TestFactory
需要一个迭代器到你想要删除的位置。您;重新提供对存储值的引用。
你可以改为:
std::vector::erase
答案 1 :(得分:2)
vector :: erase需要迭代器 - 而不是元素类型,所以你应该改变:
t.erase(t.at(i));
到
t.erase(t.begin() + i);
使其编译