在C++中从矢量中擦除对象
Erase object from vector in C++
我试图在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::remove
,class foo
应该包含operator ==
,或者应该显式传递比较函数。对于标准类型(例如int
),比较函数是由语言定义的,因此它编译时不会出错。
operator ==
的一个例子可以是:
class foo
{
...
bool operator ==(const foo &t) const { return t.a == a; }
};
相关文章:
- C++ 根据成员函数从矢量中擦除对象
- 擦除矢量问题矢量中的对象
- 如何将某个元素从shared_ptr擦除到对象向量?
- 如何根据某些值擦除/删除类对象的向量
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 擦除矢量中的对象时出错.如何将移动作业运算符添加到我的类中
- 在小对象优化中调试崩溃以进行类型擦除
- 从向量中擦除 opencv 矩形对象
- 从对象指针的 STD 列表中擦除对象
- c++矢量对象.擦除
- 对象是否可以从标准C++容器中擦除自身
- 在C++中从矢量中擦除对象
- c ++如何在内部循环中使用带有自动的矢量擦除对象
- 无法删除和擦除矢量上的对象指针
- 从矢量中擦除对象的特定实例
- 对象的 C++ 向量,包含动态分配的内存 - "擦除"不起作用
- 从 std::map 擦除对象时破坏对象
- 擦除CPP中的重叠对象
- 矢量擦除函数删除错误的对象
- 从向量c++中擦除对象时出现分段错误