十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹“C++11的函數(shù)對象怎么使用”,在日常操作中,相信很多人在C++11的函數(shù)對象怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++11的函數(shù)對象怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為始興企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、成都做網(wǎng)站,始興網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
函數(shù)對象
考慮下面的代碼:
bool istarget(const string& s){
return s.size() < 2;
}
vector v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), istarget);
cout << *found << endl;
使用find_if算法從給定的vector中找到第一個長度小于2的string對象。
如果我們希望在istarget中選擇string時使用變量而不是固定的2的時候,一般的函數(shù)就不能滿足需求了(雖然使用全局變量算是一個選項)。這時的一個選擇就是函數(shù)對象。
首先定義一個重載了()運算符的IsTarget類:
class IsTarget{
unsigned int max;
public:
IsTarget(int m):max(m){}
bool operator()(const string& s){
return s.size() < max;
}
};IsTarget類可以像下面這樣使用:
string test("H");
IsTarget it(2);
cout << it(test) << endl;注意it(test)的部分,從代碼的形式來看,這個類的對象可以以e(args)的形式編碼并執(zhí)行,因此它也是可執(zhí)行對象。長度信息是在創(chuàng)建對象it時指定,在()運算符被執(zhí)行是使用。在回到find_if的例子,可以這樣使用IsTarget類:
vector v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), IsTarget(2));
cout << *found << endl; 在執(zhí)行find_if時,比較的長度信息作為參數(shù)傳遞給IsTarget類,以便在執(zhí)行選擇操作時使用。
使用捕獲列表
使用函數(shù)對象還是有些麻煩,繼續(xù)請出lambda表達(dá)式,它有一個被[ ]包圍的捕獲列表,用于捕獲lambda表達(dá)式所在函數(shù)的局部變量:
vector v{"This","is", "a", "predicate", "."};
unsigned int max = 2;
auto found = find_if(v.begin(), v.end(),
[max](const string& s){return s.size() < max;}); max是在find_if執(zhí)行的函數(shù)里定義的變量,將其包含在lambda表達(dá)式的捕獲列表[ ]中以后,就可以在lambda表達(dá)式中使用它了。
到此,關(guān)于“C++11的函數(shù)對象怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享標(biāo)題:C++11的函數(shù)對象怎么使用
當(dāng)前網(wǎng)址:http://m.jiaotiyi.com/article/jjjjgh.html