这篇文章将为大家详细讲解有关C++如何使用仿函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
所谓仿函数就是和函数调用非常类似的一种调用方式,实际上仿函数只是重载了()运算符,
这种方式在STL容器函数中使用非常普遍,其中又分为函数对象和谓词
class t
{
public:
void operator()(stu& a) 函数对象(一元)
/*
bool operator()(stu& a) 谓词(一元),谓词只会放回布尔值
*/
};
void test(stu& a) 函数
那么调用我们可以很清楚的可以看出
仿函数调用为
t lfun;
lfun(a);
其中lfun为定义的类对象而已
函数调用为
test(a);
他们的调用看起来及其相似。
下面演示仿函数的使用方式
点击(此处)折叠或打开
-
/*************************************************************************
-
> File Name: 仿函数.cpp
-
> Author: gaopeng QQ:22389860 all right reserved
-
> Mail: gaopp_200217@163.com
-
> Created Time: Sun 23 Apr 2017 08:03:41 PM CST
-
************************************************************************/
-
#include<iostream>
-
#include<vector>
-
#include<algorithm>
-
#include<string.h>
-
using namespace std;
-
class testfun //仿函数
-
{
-
public:
-
testfun(void)
-
{
-
cnt = 0;
-
}
-
void operator()(int& a)
-
{
-
cnt++;
-
if( !(a%67))
-
{
-
cout<<a <<endl;
-
}
-
}
-
int cnt;
-
};
-
class stu
-
{
-
private:
-
char name[20];
-
int age;
-
friend class stufun;
-
public:
-
stu(const char* inc,int b)
-
{
-
strcpy(name,inc);
-
age = b;
-
}
-
};
-
class stufun
-
{
-
public:
-
int equ;
-
public:
-
stufun(int m):equ(m){} //构造函数,仿函数中可以存储任何比较条件 这是仿函数(函数对象或者谓词)和函数指针进行传递到STL函数的区别,因为仿函数更加方便
-
/*
-
void operator()(stu& a) //仿函数 一元函数对象 stufun(m)比较比m大的值 stu&a代表是STL函数会将每一个容器对象 stu 通过引用传入到a中然后一一进行比较
-
{
-
if(a.age == equ)
-
{
-
cout<<a.name<<endl;
-
cout<<a.age<<endl;
-
}
-
}
-
*/
-
bool operator()(stu& a) //一元谓词 stu&a代表是STL函数会将每一个容器对象 stu 通过引用传入到a中然后一一进行比较
-
{
-
if(a.age == equ)
-
{
-
cout<<a.name<<endl;
-
cout<<a.age<<endl;
-
return true;
-
}
-
else
-
{
-
return false;
-
}
-
}
-
};
-
void kkfun(int& a)
-
{
-
if( !(a%67))
-
{
-
cout<<a <<endl;
-
}
-
}
-
int main(void)
-
{
-
cout<<"test1—-"<<endl;
-
vector<int> m;
-
for(int i = 0;i<999;i++)
-
{
-
m.push_back(i);
-
}
-
testfun l;
-
l = for_each(m.begin(),m.end(),testfun());//调用仿函数 匿名函数对象 进行拷贝需要接回来
-
for_each(m.begin(),m.end(),kkfun);//调用函数指针
-
cout<<"test2—-"<<endl;
-
vector<stu> ii;
-
stu a("gaopeng",31);
-
stu b("yanllei",30);
-
stu c("gzh",3);
-
stu d("test",31);
-
ii.push_back(a);
-
ii.push_back(b);
-
ii.push_back(c);
-
ii.push_back(d);
-
//for_each(ii.begin(),ii.end(),stufun());
-
stufun o(3);
-
for_each(ii.begin(),ii.end(),o);//调用谓词 定义的函数对象o
-
// stufun o;
-
// o(a);
-
return 0;
-
}
关于“C++如何使用仿函数”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/tech/dev/230243.html