C 仿函式在stl標準庫的比較問題)

2021-07-10 15:19:06 字數 714 閱讀 8306

所謂仿函式相當於c#中的delegate,應該說delegate是把這個功能另外抽象了出來,便於區分。

在stl標準庫的容器中,如map型,經常會需要用到自定義的或者非基本型別的物件作為key,但是插入的時候需要對key進行比較,c++自身沒有比較功能,就需要實現乙個仿函式(委託)來告訴stl的容器這些東西應該怎麼比較。

仿函式其實是乙個類,類中過載了一些已經指定好了的成員函式(就像指定結構的委託一樣),例如這裡過載了operator()來完成比較的功能。

如下是乙個簡單的比較某strucc a的情況

class 

find_func 

find_func(struct a val) :

bool 

operator()( 

const 

struct a & arg ) 

private:

find_func();

struct a m_val; };

假設存在乙個vector

vec;以及具有某確定值的struct a的物件aa。

那麼在vec中搜尋是否存在與aa相等的物件的方法應該是:find_if(vec->begin(),vec->end(),find_func(aa));

如果成功,則會返回與aa相等的物件的迭代容器,否則返回vec->end();

如果為了刪除某個特定值的元素,可以在獲得迭代容器以後呼叫erase函式。

C 標準庫 組合型仿函式

一元組合函式配接器 最簡單的組合型函式配接器,是將某個一元運算結果作為另外乙個一元運算的輸入。其實這只不過是巢狀呼叫兩個一元仿函式。例如,如果你要構造乙個運算 先加10再乘以4 就會用到這個函式配接器。示例 compose f gx t include include include include...

STL和C 標準函式庫 (三)

stl是最新的c 標準函式庫中的乙個子集,這個龐大的子集佔據了整個庫的大約80 的分量。而作為在實現stl過程中扮演關鍵角色的模板則充斥了幾乎整個c 標準函式庫。在這裡,我們有必要看一看c 標準函式庫裡包含了哪些內容,其中又有哪些是屬於標準模板庫 即stl 的。c 標準函式庫為c 程式設計師們提供了...

STL標準庫中的演算法函式

stl標準庫中的演算法函式 非修改性序列操作 12個 型別 函式名 說明迴圈 for each 對序列中的每個元素執行某操作。查詢find 在序列中找出某個值的第一次出現的位置。find if 在序列中找出符合某謂詞的第乙個元素。find end 在序列中找出一子串行的最後一次出現的位置。find ...