lambda表示式例項

2021-10-04 17:37:40 字數 3546 閱讀 2181

#include

"pch.h"

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

/*既然lambda表示式只能使用在語句當中,如果想跨語句使用之前定義好的lambda表示式,

怎麼辦?用什麼型別來表示lambda表示式?

當然是用function型別來表示函式物件的型別了 bind1st/bind2nd bind繫結器

lambda表示式 =》 函式物件

*/class

data

//bool operator>(const data &data)const

//bool operator<(const data &data)const

int ma;

int mb;};

intmain()

);maxheap.

push

(data(10

,20))

; maxheap.

push

(data(15

,15))

; maxheap.

push

(data(20

,10))

;// 智慧型指標自定義刪除器 delete p; file* fclose(file*)

//unique_ptr>

//ptr1(fopen("data.txt", "w"), (file *pf) );

#if 0

map<

int, function<

int(

int,

int)

>> caculatemap;

caculatemap[1]

=(int a,

int b)

->

int;

caculatemap[2]

=(int a,

int b)

->

int;

caculatemap[3]

=(int a,

int b)

->

int;

caculatemap[4]

=(int a,

int b)

->

int;

cout <<

"選擇:"

;int choice;

cin >> choice;

cout <<

"10 + 15:"

<< caculatemap[choice](10

,15)<< endl;

#endif

return0;

}#if 0

/*c++11 函式物件的公升級版 =》 lambda表示式

函式物件的缺點:

使用在泛型演算法引數傳遞 比較性質/自定義操作 優先順序佇列 智慧型指標

lambda表示式的語法:

[捕獲外部變數](形參列表)->返回值;

如果lambda表示式的返回值不需要,那麼"->返回值"可以省略的

[捕獲外部變數]

:表示不捕獲任何外部變數

[=]:以傳值的方式捕獲外部的所有變數

[&]:以傳引用的方式捕獲外部的所有變數

[this]:捕獲外部的this指標

[=,&a]:以傳值的方式捕獲外部的所有變數,但是a變數以傳引用的方式捕獲

[a, b]:以值傳遞的方式捕獲外部變數a和b

[a, &b]:a以值傳遞捕獲,b以傳引用的方式捕獲

*/template

<

typename t=

void

>

class

testlambda01

void

operator()

()const};

template

<

typename t =

int>

class

testlambda02

intoperator()

(int a,

int b)

const};

template

<

typename t =

int>

class

testlambda03

void

operator()

()const

private

:int

&ma;

int&mb;};

intmain()

sort

(vec.

begin()

, vec.

end(),

(int a,

int b)

->

bool);

for(

int val : vec)

cout << endl;

// 65按序插入序列 要找第乙個小於65的數字

auto it =

find_if

(vec.

begin()

, vec.

end(),

(int a)

->

bool);

if(it != vec.

end())

for(

int val : vec)

cout << endl;

for_each

(vec.

begin()

, vec.

end(),

(int a));

cout << endl;

#if 0

auto func1 =

();func1()

;auto func2 =

(int a,

int b)

->

int;

cout<<

func2(20

,30)

int b =20;

auto func3 =[&

]()// 「a」: 無法在非可變 lambda 中修改通過複製捕獲

;func3()

; cout <<

"a:"

<< a <<

" b:"

<< b << endl;

cout <<

"-----------------------"

<< endl;

testlambda01<

> t1;t1(

);testlambda02<

> t2;

cout <20,30)

<< endl;

testlambda03<

>

t3(a, b);t3

();#endif

return0;

}#endif

Lambda表示式例項

size large 簡單的說lambda是由.net framework1.0的委託 net framework2.0的匿名方法演變而來的。但他與匿名方法是有點區別的,匿名方法需要指定引數的型別,而lambda表示式則不用。lambda表示式的語法是 輸入引數 方法體 表示式 現將舉個最簡單的例子...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

Lambda表示式和Lambda表示式樹

原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...