码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的仿函数

时间:2018-11-14 14:26:03      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:定义   http   clu   类实例化   ast   details   形式   区间   其他   

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

如:使用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

C++中的仿函数

标签:定义   http   clu   类实例化   ast   details   形式   区间   其他   

原文地址:https://www.cnblogs.com/ymd12103410/p/9957295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!