在C++中从矢量中擦除对象

Erase object from vector in C++

本文关键字:擦除 对象 C++      更新时间:2023-10-16

我试图在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;
}

我得到的确切错误就在这里
另一方面,当我创建一个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;
}

我不知道为什么第一种情况会出错。

对于std::removeclass foo应该包含operator ==,或者应该显式传递比较函数。对于标准类型(例如int),比较函数是由语言定义的,因此它编译时不会出错。

operator ==的一个例子可以是:

class foo
{
    ...
    bool operator ==(const foo &t) const { return t.a == a; }
};