C 小知識 lambda表示式

2021-08-30 15:12:08 字數 2378 閱讀 6099

lambda表示式是c++11的重要特性之一,有如下特點:

1)宣告式的程式設計風格:就地匿名定義目標函式或者函式,不需要額外寫乙個命名函式或者函式物件,以更直接的方式寫程式。

2) 簡潔:不需要額外再寫乙個函式或者函式物件,避免了**膨脹和功能分散。

3) 在需要的時間和地點實現功能閉包,使程式更加靈活。

lambda表示式以下面的形式定義乙個匿名函式,並且可以通過內的引數來捕獲一定範圍內的變數

[capture] (params) opt -> ret ;
通過方括號內的捕捉列表,可以捕獲一定範圍內的變數:

#include

intmain

(int argc,

char

* argv)

"<< std:

:endl;

auto f =

(int a)

->

int;

std:

:cout <<

"f(1) = "

<

1)<< std:

:endl;

std:

:cout << std:

:endl;

std:

:cout <<

"省略返回值型別,由return語句自動推導:(int a) "

所以,在使用的時候,預設狀態下的lambda表示式無法修改通過複製方式捕獲的外部變數,如果希望修改這些變數,需要用引用的方式進行修改

比如,我要實現乙個降序的比較,可能需要寫乙個cmp類,然後去過載()操作符,讓cmp物件去呼叫它

#include

#include

#include

class cmp };

template

void

print

(const std:

:vector

& vt)

intmain

(int argc,

char

* argv)

; std:

:cout <<

"排序前: \n"

;print

(ivec)

; std:

:sort

(ivec.

begin()

, ivec.

end(),

cmp())

; std:

:cout <<

"排序後: \n"

;print

(ivec)

;return0;

}

用上面的方式,或者是使用自定義函式,會顯得很繁瑣,那麼這個時候,其實就可以用lambda表示式代替它們

#include

#include

#include

template

void

print

(const std:

:vector

& vt)

intmain

(int argc,

char

* argv)

; std:

:cout <<

"排序前: \n"

;print

(ivec)

; std:

:sort

(ivec.

begin()

, ivec.

end(),

(const

int&a,

const

int&b)

->bool);

std:

:cout <<

"排序後: \n"

;print

(ivec)

;return0;

}

lambda表示式 lambda表示式

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

C 基礎知識 Lambda表示式

一 lambda表示式簡介 lambda表示式可以理解為匿名函式,可以包含表示式和語句。它提供了一種便利的形式來建立委託。lambda表示式使用這個運算子 它讀成 goes to 該運算子的左邊為輸入引數,右邊是表示式或者語句塊。二 例子 例1 1 using system 2using syste...

Lambda表示式和Lambda表示式樹

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