矢量"擦除"和" at"产生错误(c ++)

时间:2016-06-06 09:24:32

标签: c++ vector

我正在使用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));

我不明白为什么我会遇到上述错误。

谢谢

2 个答案:

答案 0 :(得分:4)

@TestFactory需要一个迭代器到你想要删除的位置。您;重新提供对存储值的引用。

你可以改为:

std::vector::erase

答案 1 :(得分:2)

vector :: erase需要迭代器 - 而不是元素类型,所以你应该改变:

t.erase(t.at(i));

t.erase(t.begin() + i);

使其编译