我正在尝试从矢量中删除元素。
vector<Foo> vecFoo;
Foo f1;
Foo f2;
Foo f3;
vecFoo.push_back(f1);
vecFoo.push_back(f2);
vecFoo.push_back(f3);
Foo* pF1 = &f1;
vecFoo.erase(std::remove(vecFoo.begin(), vecFoo.end(), *pF1), vecFoo.end());
最后一行产生了大量的C2784错误。我做错了什么?
(是的,这个例子有点人为,但实质上是我有一个指向向量中元素的指针,我想删除那个元素。)
答案 0 :(得分:2)
您是否错过了比较运算符?
class Foo
{
public:
bool operator==(Foo const& rhs) const { return true;}
... Other stuff
};
答案 1 :(得分:0)
你没有指向元素的指针,因为push_back会复制。您可以使用Foo* pF1 = &vecFoo[0];
假设这只是一个拼写错误,你可以非常简单地获得元素的迭代器,因为向量迭代器是随机访问。
vector<Foo>::iterator i = vecFoo.begin() + (pF1 - &vecFoo.front());
答案 2 :(得分:0)
您是否超载Foo
的{{1}}?
operator==
是否有一个非平凡的析构函数,赋值运算符或复制构造函数,但不是全部三个?如果您定义一个,则必须全部定义它们。
即使你没有重载析构函数,赋值运算符或复制构造函数,你们中的一个Foo
的成员也声明了它的析构函数或赋值运算符或复制构造函数。