回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C/C++ 技巧 >> [C++] 巧用模板定义谓词
最 近 更 新
[转][C++] 巧用 mutable推荐
[C++] 巧用模板定义谓词
巧用异或交换整型变量的值
宏的一个妙用
[C/C++ 技巧] 提高程序..推荐
[C/C++ 技巧] 产生随机..
[C/C++技巧]巧用数组减..推荐
巧用移位运算避免乘法运算
无条件循环
最 新 推 荐
[转][C++] 巧用 mutable推荐
[C/C++ 技巧] 提高程序..推荐
[C/C++技巧]巧用数组减..推荐
热 门 排 行
[C/C++ 技巧] 产生随机..
[C/C++ 技巧] 提高程序..推荐
巧用移位运算避免乘法运算
[C/C++技巧]巧用数组减..推荐
宏的一个妙用
无条件循环
[转][C++] 巧用 mutable推荐
巧用异或交换整型变量的值
[C++] 巧用模板定义谓词
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

[C++] 巧用模板定义谓词


来源:蚂蚁的 C/C++ 标准编程 作者:Antigloss 等级:精品
发布于2007-06-17 15:35 被读926次 【字体:

    谓词(predicate)是做某些检测的函数,配合标准算法库使用。假设我们要统计一个 vector<int> 里有多少个元素大于 5,则要定义一个谓词函数 gt5:

        vector<int>::difference_type cnt = count_if(vec.begin(), vec.end(), gt5);

假设我们还要统计大于 8 的元素的数目,则还要定义一个 gt8。而如果还要统计大于 10、100、150……的元素的数目,则要定义更多的函数。这明显非常不便!使用模板可以解决这个问题:

        template <int N>
        inline bool gt(int n)
        {
            return n > N;
        }

这样,只需定义一个模板,就可以用于统计大于任意值的元素的数目。例如:

        vector<int>::difference_type cnt10  = count_if(vec.begin(), vec.end(), gt<10>);
        vector<int>::difference_type cnt100 = count_if(vec.begin(), vec.end(), gt<100>);

不过,如果需要统计大于 1、2、3、4、5……的元素的数目,使用模板作为谓词也会非常不便,因为需要单独写很多个 count_if。遇到这种情况,就应该使用函数对象,这样的话,就可通过在循环中调用 count_if 来解决问题。

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:暂无相关专题

上一篇:巧用异或交换整型变量的值
下一篇:[转][C++] 巧用 mutable

共有评论 0 条 网友评分 1分 查看全部评论

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss