C 11新特性解析與應用 lambda部分

2021-08-19 19:41:35 字數 1318 閱讀 6533

lambda  的[=],[&]方式, 根據lambda的實現知道:

=:方式為傳值,在lambda定義的時候,初始化狀態就確定了

&:方式為引用,那麼引用的物件或者變數,會根據lambda執行的時候,再確定初始化狀態  這一點很重要

我們可以用 typeid(lambda).name() 來看看不同編譯器,對於lambda的型別到底是什麼

lambda 預設是帶有const 屬性的,如果要在函式體內,改變捕捉變數的值,那麼要加上mutable,去掉const屬性

lambda 與 stl:

inline void func(int a)

coutfor(auto iter=vec.begin();iter!=vec.end();++iter)

func(*iter);

for_each(vec.begin(),vec.end(),func);

for_each(vec.begin(),vec.end(),(int val),

,
,
,
,
,
};
for_each(_map.begin(),_map.end(),(auto

iter);

auto

iter=find_if(vec.begin(),vec.end(),(int

val));

cout<<*iter<
這樣用 find_if ,一眼就知道你要幹什麼。

for_each(vec.begin(),vec.end(),(int

&val));

for_each(vec.begin(),vec.end(),(const

intval));

for_each(vec.begin(),vec.end(),(const

intval){cout<

隨機值初始化容器

lambda更多的時候,是配合stl的經過調優後的演算法使用,可以大大節省開發時間與精力的投入。

但是要把lambda用好,不經過長期的磨練,踩足夠多的坑,也是很難完全掌握的。

C 11 新特性解析與應用》 讀書筆記

cplusplus 其實被定義為乙個整數 c 03 中被定義為199711l c 11 中被定義為201103l 可以通過下面的 檢測編譯器是否支援c 11 if cplusplus 201103l error should use c 11 implementation endif 列舉的作用域即...

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...

C 11 新特性試用

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...