我正在尝试按自定义数据类型向量的值删除向量元素。它工作正常如果我使用像int
等简单数据类型而不是hello
数据类型。
#include <iostream>
#include <vector>
#include <algorithm>
class hello
{
public:
hello() {
x = false;
}
bool x;
};
int main() {
hello f1;
hello f2;
hello f3;
std::vector <hello> vector_t;
vector_t.push_back(f1);
vector_t.push_back(f2);
vector_t.push_back(f3);
for (unsigned int i = 0; i < vector_t.size(); i++)
{
if (vector_t[i].x)
{
vector_t.erase(std::remove(vector_t.begin(), vector_t.end(), i), vector_t.end());
}
}
return 0;
}
显示错误:
binary'==':找不到哪个运算符带有'hello'类型的左手操作数(或者没有可接受的转换)vector_test
答案 0 :(得分:4)
答案 1 :(得分:3)
remove
尝试查找比较等于的所有元素与传递给它的任何元素。如果您没有告诉编译器如何将hello
个对象与整数i
值进行比较,则不能这样做。
你可能想做的就是删除矢量的第i个元素,如果它满足你的标准:
for (unsigned int i = 0; i < vector_t.size(); i++)
{
if (vector_t[i].x)
{
vector_t.erase(vector_t.begin() + i);
--i; // The next element is now at position i, don't forget it!
}
}
最恰当的方式是使用std::remove_if
,如acgraig5075的回答所示。
答案 2 :(得分:3)
显示错误:
binary '==': no operator found which takes a left-hand operand of type 'hello' (or there is no acceptable conversion) vector_test
您可以为您的班级提供明显缺少的操作员==
,以解决问题:
bool operator==(hello const &h)
{
return this->x == h.x;
}
你的删除/删除应该如下所示:
vector_t.erase(std::remove(vector_t.begin(), vector_t.end(), vector_t[i]), vector_t.end());