我试图用C ++中的向量擦除一个对象,但它给出了一个奇怪的(和长的)错误。我写了这个:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class foo
{
int a;
public:
foo(int _a):a(_a){}
};
int main() {
foo f1(5),f2(10);
vector<foo> vec = {f1,f2};
vec.erase(remove(vec.begin(),vec.end(),f1),vec.end()); // remove f1 (error)
return 0;
}
我得到的确切错误是here 另一方面,当我创建一个int向量然后尝试从该向量中删除一个整数时,它工作正常。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {5,10};
vec.erase(remove(vec.begin(),vec.end(),5),vec.end()); // works fine
return 0;
}
我不确定为什么在第一种情况下会出现错误。
答案 0 :(得分:5)
对于std::remove
,您的class foo
应包含operator ==
,或者您应该明确传递比较功能。对于标准类型(例如int
),比较函数由语言定义,因此编译时没有错误。
operator ==
的一个示例可以是:
class foo
{
...
bool operator ==(const foo &t) const { return t.a == a; }
};