仿函式,顧名思義,就是「仿造函式」的意思,它並不是函式,但是卻有著類似於函式的行為。那麼,它到底是什麼?
首先要說的是:仿函式是泛型程式設計強大威力和純粹抽象概念的又乙個例證。我們在c++最早接觸泛型程式設計的恐怕是在學模板(template)的時候,它具有可以任意指定型別的特點。仿函式也具有這個特點,這也充分體現出來仿函式靈活性的特點。
在類中實現乙個operator(),並給予合適的引數型別,這個類就有了類似於函式的行為,就是乙個仿函式類了。
簡單的仿函式例項:
將乙個個功能通過類來實現,大多數情況下會加大**量。仿函式也是如此,但是仿函式卻有著許多優點,除了上述的有利於資源管理、有利於**維護外,還具有這些特點
(1)智慧型性:仿函式是通過仿函式類來實現的,既然是類,裡面就可以儲存許多變數還有其他的一些資訊。我們可以利用這個特徵實現許多純的函式實現不了的功能,舉個簡單的例子:我若再仿函式中加入了統計呼叫函式次數的功能。那麼在我使用仿函式的時候,就可以自動實現統計次數的功能。所以說,它更加智慧型。
(2)靈活性:或者說,每個仿函式都可以有自己的型別。由於仿函式是泛型程式設計的乙個例證,它可以任意指定型別。
(3)通常比一般函式速度更快:尤其是大量呼叫函式的過程中。比如說:stl排序的時候,所需要的那個排序規則(為乙個bool型的函式)。
stl提供了一些仿函式,使得程式設計變得更加便捷,主要分為以下三類:
plus:相加
minus:相減
multiplies:相乘
divides:相除
modulus:取模
negate:取否
equal_to:等於
not_equal_to:不等於
greater:大於
greater_equal:大於等於
less:小於
less_equal:小於等於
logical_and:邏輯與
logical_or:邏輯或
logical_no:邏輯否
#include#includeusing namespace std;
class myclass;
class compare};
void main()
執行結果:
C 的STL之仿函式簡單介紹
include include include 演算法 include 仿函式 using namespace std bool less3 int x int main void 仿函式 繫結函式 第乙個大於30的數字 auto ifind find if myvecyor.begin myvec...
C 中的Lambda表示式與仿函式簡單介紹
c 中的lambda表示式是c 11新引入的內容,從結論上來說lambda表示式並不是必要的,但是在很多情況下可以簡化我們的 了解一下還是很有用處的。基本語法 簡單來說,lambda函式也就是乙個函式,它的語法定義如下 capture parameters mutable return type1....
仿函式 C 中仿函式的應用
仿函式 c 中仿函式的應用 在使用仿函式的時候,主要用到以下兩種 一種是以基類std unary function派生出來的派生類 另一種是以基類std binary function派生出來的派生類。而這兩種有什麼區別呢?它們之間的區別只是第一種接收的引數個數為乙個,而第二種接收的引數的個數為兩個...