void list::remove_if( MATCH )
这个方法移除list中符合条件的元素。
x为list中的某个元素,如果MATCH(x)为真,则从list中移除这个元素
MATCH通常有两种形式
1、函数
2、类对象
对于函数,如下例
bool matchfun(int x)
{
return x>1;
}
int main()
{
list<int> lst;
lst.push_back(0);
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
//此时,lst为{0,1,2,3}
lst.remove_if(matchfun);
//此时,lst为{0,1};
return 0;
}
对于类对象,需要重载 “()” 操作符,如
class Match
{
public:
bool operator()(int x)
{
return x>5;
}
};
int main()
{
list<int> lst;
lst.push_back(0);
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
//此时,lst为{0,1,2,3}
Match matchobj;
lst.remove_if(matchobj);
//此时,lst为{0,1};
return 0;
}
从效率上将,使用函数的效率可能更高。这取决于类对象构造、析构和复制的代价。这和“传值还是传引用(或指针)”类似。