自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談Boost庫中l(wèi)ambda的使用

開發(fā) 開發(fā)工具
在C++引入Boost庫的lambda之前,許多編程語言,比如Lisp、Python和C#中就已經(jīng)有了lambda。Boost庫創(chuàng)建lambda的最初動(dòng)機(jī),是為了解決使用標(biāo)準(zhǔn)庫時(shí)存在大量小的函數(shù)對(duì)象的定義的問題。而實(shí)際上,我們完全可以在需要使用這些函數(shù)對(duì)象的時(shí)候進(jìn)行聲明和定義,即就地進(jìn)行。

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

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

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

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

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

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

在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)用的例子,下面來看一下變量的延遲調(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庫的一些基本功能。lambda庫的更強(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< 
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2022-09-13 09:31:59

Python內(nèi)置函數(shù)lambda

2009-04-29 09:05:59

Lambda抽象代表.NET

2010-01-13 09:48:34

Boost庫

2009-09-09 13:01:33

LINQ Lambda

2009-06-26 10:48:45

職責(zé)鏈模式.NET

2009-08-27 09:57:50

C# Lambda表達(dá)

2025-01-15 07:00:00

Java代碼Lambda

2009-07-17 10:58:12

SwingWorker

2011-06-17 14:16:21

ListBoxWindows Pho

2016-11-01 20:26:47

前端模板underscoreWeb

2009-01-16 13:17:16

AjaxASP.NET.NET

2016-12-20 09:47:38

Apache SparLambda架構(gòu)

2011-06-07 17:14:15

關(guān)系型數(shù)據(jù)庫壓縮技術(shù)

2009-06-08 17:59:00

HibernateTemplate

2010-06-13 14:44:26

Java 7閉包Lambda表達(dá)式

2010-12-17 10:07:59

2024-01-24 12:30:18

C++開發(fā)

2011-05-26 09:20:59

配線架

2013-12-26 16:55:56

manman命令

2009-07-01 16:01:58

JSP數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)