溫馨提示×

溫馨提示×

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

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

C++11標準庫mem_fn類模板怎么使用

發(fā)布時間:2021-11-25 16:22:22 來源:億速云 閱讀:188 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“C++11標準庫mem_fn類模板怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++11標準庫mem_fn類模板怎么使用”吧!

定制算法

算法是C++標準庫中非常重要的部分,C++通過算法+容器的方式將數(shù)據(jù)結(jié)構(gòu)和算法進行了分離。這樣做的好處就是使用戶獲得最大限度的靈活性。

例如下面的Tracer類。

C++11標準庫mem_fn類模板怎么使用

我們可以非常方便的定義保存Tracer對象的數(shù)據(jù)結(jié)構(gòu):

C++11標準庫mem_fn類模板怎么使用

然后非常方便的利用排序算法進行排序:

C++11標準庫mem_fn類模板怎么使用

代碼中的compare是另外定義的一個比較函數(shù):

C++11標準庫mem_fn類模板怎么使用

通過這個函數(shù)來選擇比較的對象并決定比較的結(jié)果。

嚴格講,算法中要求的并不是函數(shù),而是一個可調(diào)用對象。參考本連載前面的文章可以知道,可調(diào)用對象就是可以以fun(a)的形式執(zhí)行的功能。C++中的可調(diào)用對象包括函數(shù),函數(shù)對象,lambada表達式,參數(shù)綁定等,它們都可以作為算法的參數(shù)。

使用function生成可調(diào)用對象

上面講到的方法非常容易理解,但是稍微有點麻煩,我們希望可以直接使用Tracer的成員函數(shù)compare成員函數(shù)。這個需求可以使用C++11中引入的function來解決:

C++11標準庫mem_fn類模板怎么使用

function是一個模板,可以指定可調(diào)用對象的形式。例子中指定了tcomp的形式:返回值為bool,參數(shù)為兩個Tracer&。代碼中將Tracer的成員函數(shù)compare賦值給tcomp之后就可以使用它了:

C++11標準庫mem_fn類模板怎么使用

這種情況下,tcomp(t1,t2)動作可以理解為t1.compare(t2)。通過這種方式,我們可以將類的成員函數(shù)轉(zhuǎn)換為可調(diào)用對象。于是排序代碼就可以寫成下面的樣子。

C++11標準庫mem_fn類模板怎么使用

使用mem_fn生成可調(diào)用對象

使用function的方法,還是有點麻煩:雖然&Tracer::compare的簽名已經(jīng)決定了可調(diào)用對象的形式,程序員還是需要另外指定。解決這個問題的方法是使用mem_fn(注意不是mem_fun)來生成可調(diào)用對象:

C++11標準庫mem_fn類模板怎么使用

mem_fn會根據(jù)成員函數(shù)指針推斷可調(diào)用函數(shù)的類型,就省去了另外指定的步驟。

到此,相信大家對“C++11標準庫mem_fn類模板怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

c++
AI