STL 如何使用list::remove_if

来源:互联网 发布:js base64 decode 编辑:程序博客网 时间:2024/05/23 15:06

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;}


从效率上将,使用函数的效率可能更高。这取决于类对象构造、析构和复制的代价。这和“传值还是传引用(或指针)”类似。

原创粉丝点击