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

原文链接: https://www.cnblogs.com/ymd12103410/p/9957295.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中的仿函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/285010

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午8:17
下一篇 2023年2月15日 上午8:18

相关推荐