日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
淺談Boost庫(kù)中l(wèi)ambda的使用

lambda庫(kù)通過(guò)創(chuàng)建一個(gè)匿名的lambda表達(dá)式來(lái)代替實(shí)名的函數(shù)對(duì)象,大大簡(jiǎn)化了標(biāo)準(zhǔn)庫(kù)的語(yǔ)法。下面我們來(lái)看一個(gè)hello world級(jí)的lambda表達(dá)式:

 
 
  1. (cout << _1 << " " << _3 << " " << _2)("Welcome"," cnblog ","to"); 

其中,_1、_2和_3稱(chēng)為占位符,用以表示第幾個(gè)參數(shù)。

在“Boost庫(kù)之bind的使用”一文中,我們用bind實(shí)現(xiàn)了找出一個(gè)整數(shù)容器中大于5但小于10的元素的個(gè)數(shù),現(xiàn)在我們嘗試用lambda來(lái)完成這項(xiàng)工作。

 
 
  1. int nCount = count_if(vctTemp.begin(), vctTemp.end(), _1>5 && _1<10); 

可以看到,相對(duì)于使用bind進(jìn)行函數(shù)對(duì)象的綁定,使用lambda使得語(yǔ)法更顯簡(jiǎn)潔,邏輯也更覺(jué)清晰。

在lambda表達(dá)式中,還有一個(gè)非常重要的概念就是常量和變量的延遲,舉例如下:

 
 
  1. for_each(vctTemp.begin(),vctTemp.end(), cout << ' ' << _1); 

該函數(shù)的本意是想在輸出每一元素前都加一個(gè)空格,但由于cout << ' '不是一個(gè)lambda表達(dá)式,因此,它會(huì)被立即輸出求值。為了實(shí)現(xiàn)延遲輸出的目的,我們需要使用constant函數(shù),以創(chuàng)建一個(gè)lambda仿函數(shù)。

 
 
  1. for_each(vctTemp.begin(),vctTemp.end(), cout << constant(' ') << _1); 

以上是常量延遲調(diào)用的例子,下面來(lái)看一下變量的延遲調(diào)用。

 
 
  1. int nIndex = 0;  
  2. for_each(vctTemp.begin(),vctTemp.end(), cout << ++nIndex << _1< 

同理,由于cout << ++nIndex不是一個(gè)lambda表達(dá)式,

只會(huì)被求值一次。為了在每次調(diào)用時(shí)都能輸出序號(hào),需要使用var函數(shù),以創(chuàng)建一個(gè)lambda仿函數(shù)。

 
 
  1. for_each(vctTemp.begin(),vctTemp.end(), cout << ++var(nIndex) << _1<另外,還可以將一個(gè)lambda表達(dá)式賦給一個(gè)function,從而實(shí)現(xiàn)延遲調(diào)用。  
  2. function fAdd = cout << _1 << "+" << _2 << "=" <<_1+_2 << endl;  
  3. fAdd (1,2);  
  4. fAdd (3,4); 

以上介紹了lambda庫(kù)的一些基本功能。lambda庫(kù)的更強(qiáng)大之處在于,它提供了一些用于控制結(jié)構(gòu)的函數(shù)模板,比如:if_then、if_then_else、if_then_else_return、while_loop、do_while_loop、for_loop、switch_statement等。下面

if_then_else為例,介紹其用法。

 
 
  1. for_each(vctTemp.begin(),vctTemp.end(),if_then_else(_1%2==0,cout<<_1<< '\n',cout< 

分享名稱(chēng):淺談Boost庫(kù)中l(wèi)ambda的使用
網(wǎng)站路徑:http://m.5511xx.com/article/ccegieo.html