如何使用 remove_if 从向量中删除元素

Posted

技术标签:

【中文标题】如何使用 remove_if 从向量中删除元素【英文标题】:How to remove an element from a vector using 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”的转换 请编辑您的问题以包含错误,而不是将其放在评论中。 【参考方案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); 终于成功了

以上是关于如何使用 remove_if 从向量中删除元素的主要内容,如果未能解决你的问题,请参考以下文章

C++:使用 remove_if 过滤条件向量

从向量中删除项目

从向量中删除元素时如何减小向量的大小?

如何使用 Boost lambda 将 remove_if 与 UUID 比较应用?

如何从向量中随机删除一个元素?

remove_if 中的否定谓词