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

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

新聞中心

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

lambda庫通過創(chuàng)建一個匿名的lambda表達式來代替實名的函數(shù)對象,大大簡化了標準庫的語法。下面我們來看一個hello world級的lambda表達式:

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

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

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

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

可以看到,相對于使用bind進行函數(shù)對象的綁定,使用lambda使得語法更顯簡潔,邏輯也更覺清晰。

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

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

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

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

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

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

同理,由于cout << ++nIndex不是一個lambda表達式,

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

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

以上介紹了lambda庫的一些基本功能。lambda庫的更強大之處在于,它提供了一些用于控制結(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< 

新聞名稱:淺談Boost庫中l(wèi)ambda的使用
本文地址:http://www.5511xx.com/article/ccegieo.html