日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]一.std::bindbind是這樣一種機(jī)制,它可以將參數(shù)綁定于可調(diào)用對(duì)象,產(chǎn)生一個(gè)新的可調(diào)用實(shí)體,這種機(jī)制在函數(shù)回調(diào)時(shí)頗為有用。C++98中,有兩個(gè)函數(shù)bind1st和bind2nd,它們分別用來(lái)綁

一.std::bind

bind是這樣一種機(jī)制,它可以將參數(shù)綁定于可調(diào)用對(duì)象,產(chǎn)生一個(gè)新的可調(diào)用實(shí)體,這種機(jī)制在函數(shù)回調(diào)時(shí)頗為有用。C++98中,有兩個(gè)函數(shù)bind1st和bind2nd,它們分別用來(lái)綁定functor的第一個(gè)和第二個(gè)參數(shù),都只能綁定一個(gè)參數(shù)。C++98提供的這些特性已經(jīng)由于C++11的到來(lái)而過(guò)時(shí),由于各種限制,我們經(jīng)常使用bind而非bind1st和bind2nd。在C++11標(biāo)準(zhǔn)庫(kù)中,它們均在functional頭文件中。而C++STL很大一部分由Boost庫(kù)擴(kuò)充,STL中的shared_ptr等智能指針,bind及function都是由Boost庫(kù)引入。在寫(xiě)代碼過(guò)程中,要養(yǎng)成使用bind,function,lambda和智能指針的習(xí)慣,它們非常強(qiáng)大簡(jiǎn)潔實(shí)用。

1.過(guò)時(shí)的bind1st和bind2nd
bind1st(op, arg) :op(arg, param)?
bind2nd(op, arg) :op(param, arg)

vectorcoll?{1,?2,?3,?4,?5,?11,?22,?5,?12};
//?查找第一個(gè)元素值大于10的元素
std::find_if(coll.begin(),?coll.end(),?//?范圍
?????????????std::bind2nd(std::greater(),?10));//?將10綁定到第二個(gè)參數(shù),也就是?......大于10
//?查找元素值大于10的元素的個(gè)數(shù)
int?_count?=?count_if(coll.begin(),?coll.end(),?//?范圍
??????????????std::bind1st(less(),?10));//?將10綁定到第一個(gè)參數(shù),也就是10小于......

2. C++11中的std::bind


//function?object內(nèi)部調(diào)用plus<>(也就是operator+),以占位符(placeholders)_1為第一個(gè)參數(shù),
//以10為第二個(gè)參數(shù),占位符_1表示實(shí)際傳入此表達(dá)式的第一實(shí)參,返回“實(shí)參+10”的結(jié)果值
auto?plus10?=?std::bind(std::plus(),?std::placeholders::_1,?10);
std::cout?<<?plus10(7)?<<?std::endl;//?輸出17
//?(x?+?10)*2,下面的代碼中x=7
std::bind(std::multiplies(),?
??????????std::bind(std::plus(),?std::placeholders::_1,?10),//?i+10
??????????2)(7);

注意:上面所用的less

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉