您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C++11標準庫mem_fn類模板怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++11標準庫mem_fn類模板怎么使用”吧!
定制算法
算法是C++標準庫中非常重要的部分,C++通過算法+容器的方式將數(shù)據(jù)結(jié)構(gòu)和算法進行了分離。這樣做的好處就是使用戶獲得最大限度的靈活性。
例如下面的Tracer類。
我們可以非常方便的定義保存Tracer對象的數(shù)據(jù)結(jié)構(gòu):
然后非常方便的利用排序算法進行排序:
代碼中的compare是另外定義的一個比較函數(shù):
通過這個函數(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來解決:
function是一個模板,可以指定可調(diào)用對象的形式。例子中指定了tcomp的形式:返回值為bool,參數(shù)為兩個Tracer&。代碼中將Tracer的成員函數(shù)compare賦值給tcomp之后就可以使用它了:
這種情況下,tcomp(t1,t2)動作可以理解為t1.compare(t2)。通過這種方式,我們可以將類的成員函數(shù)轉(zhuǎn)換為可調(diào)用對象。于是排序代碼就可以寫成下面的樣子。
使用mem_fn生成可調(diào)用對象
使用function的方法,還是有點麻煩:雖然&Tracer::compare的簽名已經(jīng)決定了可調(diào)用對象的形式,程序員還是需要另外指定。解決這個問題的方法是使用mem_fn(注意不是mem_fun)來生成可調(diào)用對象:
mem_fn會根據(jù)成員函數(shù)指針推斷可調(diào)用函數(shù)的類型,就省去了另外指定的步驟。
到此,相信大家對“C++11標準庫mem_fn類模板怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(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)容。