您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关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++如何使用仿函数”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。