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;
-
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2136560/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c++ for_each()與仿函式C++函式
- C++ functional庫中的仿函式C++Function函式
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- 理解仿函式函式
- 仿函式——Functor函式
- call仿函式函式
- C++學習隨筆——C++仿函式的應用方法C++函式
- 什麼是仿函式?函式
- 淺析stl仿函式函式
- c/c++ 強制去掉轉移字元的辦法 以及 仿函式C++字元函式
- C++函式C++函式
- 【C++】函式C++函式
- c++ Beep函式C++函式
- c++函式模板C++函式
- C++ Virtual函式C++函式
- C++ 建構函式和解構函式C++函式
- C++的函式和模板函式 (轉)C++函式
- C++的函式式革命C++函式
- C/C++—— C++中函式重寫和函式過載C++函式
- C++中函式指標與函式物件C++函式指標物件
- C++ 類建構函式和解構函式C++函式
- c++中訊息函式 -- GetMessage函式C++函式
- C++ replace() 函式用法C++函式
- C++中strlen函式C++函式
- C++解構函式C++函式
- C++函式過載C++函式
- c++ 函式指標C++函式指標
- C++之memset函式C++函式
- C++ 序列操作函式C++函式
- 【C++】建構函式C++函式
- C++ 虛擬函式C++函式
- C++建構函式C++函式
- C++ -- TranslateMessage函式C++函式
- C++虛擬函式C++函式
- C++筆記--函式C++筆記函式
- 函式回撥(C++)函式C++
- c++的remove函式C++REM函式
- C++(函式指標)C++函式指標