您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)C++如何使用仿函數(shù),小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
所謂仿函數(shù)就是和函數(shù)調(diào)用非常類似的一種調(diào)用方式,實際上仿函數(shù)只是重載了()運算符,
這種方式在STL容器函數(shù)中使用非常普遍,其中又分為函數(shù)對象和謂詞
class t
{
public:
void operator()(stu& a) 函數(shù)對象(一元)
/*
bool operator()(stu& a) 謂詞(一元),謂詞只會放回布爾值
*/
};
void test(stu& a) 函數(shù)
那么調(diào)用我們可以很清楚的可以看出
仿函數(shù)調(diào)用為
t lfun;
lfun(a);
其中l(wèi)fun為定義的類對象而已
函數(shù)調(diào)用為
test(a);
他們的調(diào)用看起來及其相似。
下面演示仿函數(shù)的使用方式
點擊(此處)折疊或打開
/*************************************************************************
> File Name: 仿函數(shù).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 //仿函數(shù)
{
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){} //構(gòu)造函數(shù),仿函數(shù)中可以存儲任何比較條件 這是仿函數(shù)(函數(shù)對象或者謂詞)和函數(shù)指針進行傳遞到STL函數(shù)的區(qū)別,因為仿函數(shù)更加方便
/*
void operator()(stu& a) //仿函數(shù) 一元函數(shù)對象 stufun(m)比較比m大的值 stu&a代表是STL函數(shù)會將每一個容器對象 stu 通過引用傳入到a中然后一一進行比較
{
if(a.age == equ)
{
cout<<a.name<<endl;
cout<<a.age<<endl;
}
}
*/
bool operator()(stu& a) //一元謂詞 stu&a代表是STL函數(shù)會將每一個容器對象 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());//調(diào)用仿函數(shù) 匿名函數(shù)對象 進行拷貝需要接回來
for_each(m.begin(),m.end(),kkfun);//調(diào)用函數(shù)指針
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);//調(diào)用謂詞 定義的函數(shù)對象o
// stufun o;
// o(a);
return 0;
}
關(guān)于“C++如何使用仿函數(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。