#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 時,查詢表示...