如何使用remove_if()算法

ZDNet软件频道 时间:2003-10-10 作者:ZDNet China |  我要评论()
本文关键词:cpptips
与 remove() 不一样的是, remove_if() 通过第三个参数来选择它要去掉的元素。这样能使你在同一个容器中去掉具有不同值的元素(例如:奇数、元音字母、大写字母等)。
本文译自Builder.com,未经许可请勿转载我们要讨论STL的 remove_if() 算法和用法。 remove_if() 算法的原型如下(定义在标准头文件 algorithm.h中):

template<class ForwardIterator, class T>

ForwardIterator remove(ForwardIterator first,

ForwardIterator last,

Predicate pred);

前两个参数表明了序列的开始和结束。第三个参数是一个判断条件或一个函数,要求返回布尔值。

与 remove() 不一样的是, remove_if() 通过第三个参数来选择它要去掉的元素。这样能使你在同一个容器中去掉具有不同值的元素(例如:奇数、元音字母、大写字母等)。这些都是在第三个参数中定义的。一个具体的例子有助于说明这点。

使用remove_if()

比如:我们想从字符串中去掉所有的元音字符。我们需要辨别出元音和非元音字符,使用如下面所定义的 vowel():

#include <functional>

template <class T>

class is_vowel: public std::unary_function<T, bool>

{

public:

bool operator() (T t) const

{

if((t == ‘a’) || (t == ‘e’) || (t == ‘i’) || (t == ‘o’) || (t == ‘u’))

return true;

return false;

}

};

(注意:对于其它非英语语言,上述的定义需要一些修改)


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134