zoukankan      html  css  js  c++  java
  • C++中的仿函数

    仿函数:实质就是重载了小括号(),通过类,定义一个对象,对象可以被实例化,具有内存可以存储数据,把需要比较的数据事先给到类对象的成员,这样在比较两个值的时候,可以只传入需要被比较的值即可。因为比较的值有一个已经在类实例化对象时,就已经初始化给到类对象的成员,后期只需要传入需要被比较的那个值。

    如:使用count_if()函数,取出比某个设定值大的数或小的数的个数
    count_if():需要三个参数,前两个为指针,即待比较值的地址区间,第三个为选取比较的方式,将##一个值##传入第三个方式中。这个函数只能传入一个值,若不采用仿函数形式,在比较时不方便,需要在函数中手动设定待比较的值
    如下,每次比较都需要手动设置7或者其他数字

    bool LessThan7Function(const string& str) {
        return str.length() < 7;
    }
    

    采用仿函数,则在初始化对象的时候,将比较值先传给对象的成员,这样后期就无需再设定,只要将待比较的值和对象的成员进行比较即可

    #include "stdafx.h"
    #include<vector>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    class great
    {
    public:
    	bool operator()(const string&str)
    	{
    		return str.length() > length;
    	}
    	great(int ss) :length(ss){}
    private:
    	int length;
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
    	vector<string>s{"apple","aaaaaa","123"};
    	int t = 0;
    	vector<string>::iterator first = s.begin();
    	vector<string>::iterator last = s.end();
    	t = count_if(first, last, great(2));   //将比较的值2先传给对象成员length
    	cout << t << endl;
    	return 0;
    }
    

    这篇博客来龙去脉讲的比较详细:https://blog.csdn.net/codedoctor/article/details/79654690

  • 相关阅读:
    LOJ#2244 起床困难综合症
    CF集萃2
    LOJ#2085 循环之美
    LOJ#2087 国王饮水记
    LOJ#2304 泳池
    人生中十个重要的健康伴侣
    web容器和servlet容器
    有关服务器,web 服务器,WEB容器的一点总结
    学习Java需要达到的25个目标
    EJB 规范
  • 原文地址:https://www.cnblogs.com/ymd12103410/p/9957295.html
Copyright © 2011-2022 走看看