C ++ - 按自定义数据类型向量的值删除元素

时间:2018-06-13 13:22:00

标签: c++ vector

我正在尝试按自定义数据类型向量的值删除向量元素。它工作正常如果我使用像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

3 个答案:

答案 0 :(得分:4)

您希望在for成员为真的情况下使用enter image description here

if

{{1}}循环和{{1}}条件不是必需的,不需要这样做。

答案 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());

演示:https://ideone.com/E3aV76