您的位置:首页 > 其它

STL 如何使用list::remove_if

2013-05-03 17:15 260 查看
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;
}


从效率上将,使用函数的效率可能更高。这取决于类对象构造、析构和复制的代价。这和“传值还是传引用(或指针)”类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐