如何使用 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 & el == A & el
。 std::remove_if
遍历向量并将其元素传递给 lambda,因此 lambda 参数类型应该是向量的类型。
【讨论】:
只是想知道 lambda 中的参数,在那里使用auto & 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 从向量中删除元素的主要内容,如果未能解决你的问题,请参考以下文章