中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何使用仿函數

發布時間:2021-12-01 09:10:06 來源:億速云 閱讀:201 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C++如何使用仿函數,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。


所謂仿函數就是和函數調用非常類似的一種調用方式,實際上仿函數只是重載了()運算符,
這種方式在STL容器函數中使用非常普遍,其中又分為函數對象和謂詞

class t
{
public:
void operator()(stu& a) 函數對象(一元)
/*
bool operator()(stu& a) 謂詞(一元),謂詞只會放回布爾值
*/
};
void test(stu& a) 函數

那么調用我們可以很清楚的可以看出
仿函數調用為
t lfun;
lfun(a); 
其中lfun為定義的類對象而已
函數調用為
test(a);

他們的調用看起來及其相似。

下面演示仿函數的使用方式

點擊(此處)折疊或打開

  1. /*************************************************************************

  2.     > File Name: 仿函數.cpp

  3.     > Author: gaopeng QQ:22389860 all right reserved

  4.     > Mail: gaopp_200217@163.com

  5.     > Created Time: Sun 23 Apr 2017 08:03:41 PM CST

  6.  ************************************************************************/


  7. #include<iostream>

  8. #include<vector>

  9. #include<algorithm>

  10. #include<string.h>

  11. using namespace std;





  12. class testfun //仿函數

  13. {

  14.         public:

  15.                 testfun(void)

  16.                 {

  17.                         cnt = 0;

  18.                 }

  19.                 void operator()(int& a)

  20.                         {

  21.                                 cnt++;

  22.                                 if( !(a%67))

  23.                                 {

  24.                                         cout<<a <<endl;

  25.                                 }

  26.                         }

  27.                 int cnt;

  28. };



  29. class stu

  30. {

  31.         private:

  32.                 char name[20];

  33.                 int age;

  34.                 friend class stufun;

  35.         public:

  36.                 stu(const char* inc,int b)

  37.                 {

  38.                         strcpy(name,inc);

  39.                         age = b;

  40.                 }


  41. };


  42. class stufun

  43. {

  44.         public:

  45.                 int equ;

  46.         public:

  47.                 stufun(int m):equ(m){} //構造函數,仿函數中可以存儲任何比較條件 這是仿函數(函數對象或者謂詞)和函數指針進行傳遞到STL函數的區別,因為仿函數更加方便

  48.                 /*

  49.                 void operator()(stu& a) //仿函數 一元函數對象 stufun(m)比較比m大的值 stu&a代表是STL函數會將每一個容器對象 stu 通過引用傳入到a中然后一一進行比較

  50.                 {

  51.                         if(a.age == equ)

  52.                         {

  53.                                 cout<<a.name<<endl;

  54.                                 cout<<a.age<<endl;

  55.                         }

  56.                 }

  57.                 */

  58.                 bool operator()(stu& a) //一元謂詞 stu&a代表是STL函數會將每一個容器對象 stu 通過引用傳入到a中然后一一進行比較

  59.                 {

  60.                         if(a.age == equ)

  61.                         {

  62.                                 cout<<a.name<<endl;

  63.                                 cout<<a.age<<endl;

  64.                                 return true;

  65.                         }

  66.                         else

  67.                         {

  68.                                 return false;

  69.                         }

  70.                 }


  71. };



  72. void kkfun(int& a)

  73. {

  74.         if( !(a%67))

  75.         {

  76.                 cout<<a <<endl;

  77.         }

  78. }


  79. int main(void)

  80. {

  81.         cout<<"test1----"<<endl;

  82.         vector<int> m;

  83.         for(int i = 0;i<999;i++)

  84.         {

  85.                 m.push_back(i);

  86.         }

  87.         testfun l;

  88.     l = for_each(m.begin(),m.end(),testfun());//調用仿函數 匿名函數對象 進行拷貝需要接回來


  89.         for_each(m.begin(),m.end(),kkfun);//調用函數指針

  90.         cout<<"test2----"<<endl;


  91.         vector<stu> ii;

  92.         stu a("gaopeng",31);

  93.         stu b("yanllei",30);

  94.         stu c("gzh",3);

  95.         stu d("test",31);

  96.         ii.push_back(a);

  97.         ii.push_back(b);

  98.         ii.push_back(c);

  99.         ii.push_back(d);


  100.         //for_each(ii.begin(),ii.end(),stufun());

  101.         stufun o(3);

  102.         for_each(ii.begin(),ii.end(),o);//調用謂詞 定義的函數對象o


  103. // stufun o;

  104. // o(a);



  105.         return 0;


  106. }

關于“C++如何使用仿函數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

繁峙县| 栾川县| 陆良县| 石楼县| 肥西县| 阿荣旗| 建德市| 临漳县| 吉木乃县| 垣曲县| 托里县| 昆明市| 淅川县| 池州市| 祁连县| 泉州市| 葵青区| 富锦市| 永川市| 仁布县| 龙井市| 遂宁市| 凤冈县| 汉中市| 勐海县| 三原县| 江门市| 信阳市| 嫩江县| 枣强县| 达日县| 广东省| 本溪市| 澎湖县| 通山县| 绥芬河市| 兴城市| 民县| 新沂市| 吕梁市| 邵阳市|