亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++11中怎么實現參數綁定

發布時間:2021-07-05 16:47:49 來源:億速云 閱讀:181 作者:Leah 欄目:大數據

C++11中怎么實現參數綁定,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

lambda表達式的缺點

還記得當初引入lambda表達式的原因么?向算法傳遞謂詞時,由于一般的函數無法傳遞參數以外的信息,函數對象又比較麻煩,所以引入了lambda表達式。

但是lambda表達式也有缺點:在類似功能多次使用的時候,每次定義lambada表達式也會比較麻煩。本文介紹另一種方式:參數綁定。

標準庫bind函數

繼續用lambda表達式中用過的例子,如果希望找到第一個長度小于2的string,可以使用以下代碼:

bool istarget(const string& s){
   return s.size() < 2;
}
vector<string> v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), istarget);
cout << *found << endl;

如果我們希望在istarget中選擇string時使用變量而不是固定的2的時候,一般的函數就不能滿足需求了(雖然使用全局變量算是一個選項)。除了和函數對象和lambda表達式以外,還可以使用標準庫bind函數來實現,其步驟如下:

根據需求定義比較函數

在本例中,就是定義一個接受選擇對象string對象和最小長度參數的istarget函數:

bool istarget(const string& s, int sz){
   return s.size() < sz;
}

使用參數綁定定義新的可調用對象

C++11標準庫提供了一個bind函數,按照C++ Primer的說法,可以將bind函數看作一個通用的函數適配器,它接受一個可調用對象,生成一個新的可調用對象來“適應”原對象的參數列表。調應bind的一般形式為:

auto newCallable = bind(callable, arg_list);

具體到本例,可以這樣定義:

  

auto isTarget = bind(istarget, _1, 2);

istarget:bind適配的對象,就是第一步中定義具有兩個參數的istarget函數

接下來是傳遞給istarget的參數。參數的順序和istarget參數列表中規定的一致。

_1:占位符,_1代表isTarget被調用時的接受的第一個實參,這個_1處在bind參數列表的第一個位置表明isTarget的第一個實參會在調用istarget時作為istarget的第一個實參使用。

2:比較長度信息,形式和占位符不同,處在參數列表的第二個位置,這個值會在調用istarget時作為istarget的第二個實參使用。

使用定義的可調用對象

vector<string> v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), isTarget);
cout << *found << endl;

由于在bind定義時只使用了一個占位符,所以可以把isTarget當作一個只有一個參數的可調用對象使用,這個參數的類型和istarget的第一個參數一致。

istarget函數定義一次之后,可以使用bind函數適應各種算法的要求,從而實現了實現一次定義,多次使用的目標。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

c++
AI

崇左市| 麟游县| 佳木斯市| 沧州市| 吴忠市| 林口县| 江阴市| 辽阳县| 娱乐| 大姚县| 双鸭山市| 堆龙德庆县| 庆元县| 左权县| 渑池县| 沙田区| 永吉县| 寿宁县| 澄江县| 阿瓦提县| 甘南县| 淮南市| 临武县| 蒲江县| 阿图什市| 闸北区| 洪洞县| 吉林省| 泗洪县| 霍林郭勒市| 广安市| 合川市| 九龙县| 垦利县| 罗源县| 扎兰屯市| 镇赉县| 大埔县| 乌拉特后旗| 益阳市| 崇礼县|