中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

定西市| 万荣县| 凤冈县| 侯马市| 崇州市| 天柱县| 长子县| 张家口市| 吉木乃县| 蓬安县| 闵行区| 宜川县| 玉溪市| 巩义市| 石首市| 富宁县| 鹿邑县| 平昌县| 太原市| 琼中| 调兵山市| 绥芬河市| 西吉县| 望江县| 安福县| 武宣县| 兴安县| 桂阳县| 铜鼓县| 南平市| 乾安县| 屯留县| 六枝特区| 丰都县| 泗洪县| 巨鹿县| 宣武区| 英德市| 徐水县| 东安县| 扶风县|