【问题标题】:How to remove an element from a vector using remove_if如何使用 remove_if 从向量中删除元素
【发布时间】:2020-07-03 05:02:43
【问题描述】:

我有以下代码:我在删除函数中遇到编译错误。我想从向量中删除其元素具有x 匹配输入值x 的元素。

class A
{
   int x,y;
   public:
   init(int a, int b)
   {
     x = a; y= b;
   }
   int getX(){return x;}
}
class B
{
   public:
   void add (int a, int b)
   {
     A a1;
     a1.init(a,b);
     MyVector.push_back(a1);
   }
   void remove(int x)
   {
      MyVector.erase(remove_if(MyVector.begin(), MyVector.end(),                                         
                  [&vec](int x){return (vec.getX() == x);}), MyVector.end());

   }
   vector<A> MyVector;
}

【问题讨论】:

  • 你的错误是什么?
  • classTest.cpp:72:52: 注意:PointVector::remove(int)::__lambda4 [&vec](int x){return (vec.getX() == x);}) , testVector.end()); ^ classTest.cpp:72:52: 注意:没有已知的参数 1 从“A”到“int”的转换
  • 请编辑您的问题以包含错误,而不是将其放在评论中。

标签: c++ algorithm vector stl iterator


【解决方案1】:

您必须为init(int a, int b) 提供返回类型,并且在类定义之后错过了两个;s,并且错误地使用了std::remove_if()。这是它的documentation

#include <vector>
#include <algorithm>
class A
{
    int x,y;
public:
    void init(int a, int b)
    {
        x = a; y= b;
    }
    int getX(){return x;}
};
class B
{
public:
    void add (int a, int b)
    {
        A a1;
        a1.init(a,b);
        MyVector.push_back(a1);
    }
    void remove(int x)
    {
        MyVector.erase(std::remove_if(MyVector.begin(), MyVector.end(),
                                 [&x](auto & el){return (el.getX() == x);}), MyVector.end());

    }
    std::vector<A> MyVector;
};

请注意auto &amp; el == A &amp; elstd::remove_if 遍历向量并将其元素传递给 lambda,因此 lambda 参数类型应该是向量的类型。

【讨论】:

  • 只是想知道 lambda 中的参数,在那里使用 auto &amp; el 与使用 auto el 有什么区别?
  • @Ranoiaetep 通过引用传递元素,而不是通过值来避免复制。
  • testVector.erase(remove_if(testVector.begin(), testVector.end(), [&x](point& p){return (p.getX() == x);}), testVector 。结尾());这仍然给我错误
  • 谁能解释一下如何在代码中编写这部分。 "[&x](auto & el){return (el.getX() == x);})"
  • [x](Point p){return (p.getX() == x);} 终于成功了
猜你喜欢
  • 2019-01-07
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多