如何使用remove_if擦除
问题描述:
我想知道如何根据条件从列表中删除对象。如何使用remove_if擦除
经过研究,这是我得到的,但它仍然行不通!
所以我想知道如何使用remove_if
擦除。
Class A
{
public:
A(int x,int y);
int x;
int y;
};
int main()
{
list<A> listA;
A lista1(123,32);
listA.push_back(lista1);
A lista2(3123,1233);
listA.push_back(lista2);
A lista3(123,4123);
listA.push_back(lista3);
//HERE HOW TO REMOVE LIST if x = 123?
listA.erase(remove_if(listA.begin(),listA.end(),/*REMOVE CRITERIA*/);
}
答
std::list
具有remove_if
成员函数:
http://www.cplusplus.com/reference/stl/list/remove_if/
为了您的谓词,你既可以写一个函子:
struct RemoveIfX
{
RemoveIfX(int x) : m_x(x) {}
bool operator() (const A& a)
{
return (a.x == m_x);
}
int m_x;
};
listA.remove_if(RemoveIfX(123));
或者使用lambda:
listA.remove_if([](const A& a) { return (a.x == 123); });
你好,谢谢你的回复!所以你说我应该超载我的A类操作符()? – mister
不,RemoveIfX是一个独立的帮助器类。兰姆达斯现在通常更受欢迎,因为它们更简洁。如果您使用的编译器不支持它们,我给出了两个选项。 –
我想知道更多关于lambda方法的信息(我尝试过,但只用g ++ 4.4.1得到了编译错误)。 – Walter