C 入門系列 仿函式 functor(精講)

2021-10-14 02:41:34 字數 1117 閱讀 9384

來看仿函式的通俗定義:仿函式(functor)又稱為函式物件(function object)是乙個能行使函式功能的類。仿函式的語法幾乎和我們普通的函式呼叫一樣,不過作為仿函式的類,都必須過載operator()運算子。

先考慮乙個應用防函式的簡單例子:假設有乙個vector,你的任務是統計長度小於5的string的個數,這裡我們會使用count_if函式。下面介紹一下count_if函式:

count_if(first,last,comp) (在comp為true的情況下計數):first為首迭代器,last為末迭代器,comp為比較bool函式,為true則計數,函式返回型是int,count_if要求comp函式只能帶乙個引數(所以引出了仿函式的概念)。

為使用count_if函式,你的comp函式可能會寫成這樣:

bool comp(const string& str) 

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

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

bool comp(const string& str, int len)

void operator() (const string& str) const

bool operator() (const string& str) const

private:

const int length;

}; int main()

{ vectormyvector;

myvector.push_back("jack");

myvector.push_back("tom");

myvector.push_back("mchical");

for (int i=0; i<3; i++){

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

C 仿函式 functor 詳解

所謂的仿函式 functor 是通過過載 運算子模擬函式形為的類。因此,這裡需要明確兩點 1 仿函式不是函式,它是個類 2 仿函式過載了 運算子,使得它的對你可以像函式那樣子呼叫 的形式好像是在呼叫 函式 看下面的例項 include using namespace std const int cm...

stl中的仿函式functor的應用

stl中的仿函式functor的應用 在stl的泛型演算法中,functor應用甚多。template struct plus template struct minus void test 在泛型演算法中,應用甚多的是後面的那種 匿名物件 因為很多algorithm中,匿名物件的生命週期在演算法中...

python 仿函式 C 仿函式

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