c 仿函式簡介

2021-08-27 11:47:29 字數 840 閱讀 4197

c++仿函式 functor

內容整理自國外c++教材

先考慮乙個簡單的例子:假設有乙個vector,你的任務是統計長度小於5的string的個數,如果使用count_if函式的話,你的**可能長成這樣:

1 bool lengthislessthanfive(const string& str) 

4 int res=count_if(vec.begin(), vec.end(), lengthislessthanfive);

其中count_if函式的第三個引數是乙個函式指標,返回乙個bool型別的值。一般的,如果需要將特定的閾值長度也傳入的話,我們可能將函式寫成這樣:

1 bool lenthislessthan(const string& str, int len) 

4 bool operator() (const string& str) const

7 private:

8 const int length;

9 };

1 count_if(myvector.begin(), myvector.end(), shorterthan(length));//直接呼叫即可
這裡需要注意的是,不要糾結於語法問題:shorterthan(length)似乎並沒有呼叫operator()函式?其實它呼叫了,建立了乙個臨時物件。你也可以自己加一些輸出語句看一看。

這篇博文就先記到這裡了,仿函式也在stl中大量涉及到,不徹底弄懂仿函式的問題看到stl原始碼就會一頭包。後續可能再分享一些關於functor的資料和個人學習心得。

python 仿函式 C 仿函式

c 的標準庫stl裡面有6大部件,其中之一為仿函式。初始看到這一名字可能讓人摸不著頭腦 函式倒是挺容易理解,何故又起個仿函式的名字呢?本文將帶你揭開它看起來挺讓人迷惑但是實際上很簡單的面紗。仿函式,看名字就知道它肯定和函式有什麼關聯,但是也肯定和函式有什麼區別。函式主要是一塊接收輸入引數然後按照一定...

仿函式 C 中仿函式的應用

仿函式 c 中仿函式的應用 在使用仿函式的時候,主要用到以下兩種 一種是以基類std unary function派生出來的派生類 另一種是以基類std binary function派生出來的派生類。而這兩種有什麼區別呢?它們之間的區別只是第一種接收的引數個數為乙個,而第二種接收的引數的個數為兩個...

C 函式物件 仿函式

概念 模仿函式的類,使用方式如同函式 本質 函式物件是乙個類,類中對小括號 進行了函式過載。仿函式主要用於stl中的演算法中,函式指標雖然也可以作為演算法的引數,但它不能滿足stl對抽象性的要求,也不能滿足軟體積木的要求 函式指標無法和stl其他元件搭配,產生更靈活變化。案例 如下 include ...