C 中泛型演算法詳解2 lambda表示式

2021-10-19 09:15:07 字數 858 閱讀 3709

上一節關於泛型演算法的介紹中,我們使用過sort排序演算法,僅僅傳入了vector的開頭和結尾的兩個迭代器。該演算法還會接受第三個引數:謂詞引數(predicate)

謂詞是乙個可呼叫的表示式,返回乙個能用做條件的值。

所有的標準庫使用的謂詞分為兩類:

為文章一致性,筆者將使用lambda表示式的各種泛型演算法放在另外的一篇博文中。

乙個lambda表示乙個可呼叫**單元。我們可以把它理解為乙個未命名的內斂函式。

形式如下:

[capture list] (parameter list) -> return type

完整的lambda包括四部分

capture list捕獲列表:lambda所在函式定義的區域性變數的列表

parameter list 引數列表

return type 返回型別

function body: 函式體

在給傳入stl演算法傳入謂詞的時候, 引數列表通常為一元謂詞(單一引數)或者二元謂詞(兩個引數)。

如果我們需要傳入區域性變數引數,需要使用捕獲列表。

如果lambda的函式體中包含return之外的任何語句,編譯器假定lambda返回void

所以,當我們需要為lambda定義返回型別時,必須使用尾置返回型別。

關於尾置返回型別(trailing return type)

auto func(int i) -> int(*)[10]

比如上式表示返回乙個指向包含10個整數陣列的指標。

C 中泛型演算法

前面幾篇部落格簡單的介紹了幾種標準庫容器,想必大家一定會感覺標準庫中的各個容器的操作函式特別的少。的卻標準庫並沒有給每乙個容器單獨定義很多操作函式,而是提供了一堆通用的函式來供其一起使用。c 中大多數演算法都定義在標頭檔案algorithm中,當然標頭檔案numeric中定義了一組數值泛型演算法 通...

C 泛型詳解

泛型就是將型別做引數的技術!詳細一點來說就是 泛型就是就是使用型別引數定義的資料型別或方法。平常使用list的時候,我們就在不知不覺中已經使用了泛型。泛型的語法有倆種.第一種是在類名後面加上 class my 第二種是在方法名後面加上 csharp class your 倆種格式都可以,看個人愛好呼...

C Primer之泛型演算法lambda筆記

泛型演算法中有部分演算法除了第乙個和第二個引數接受迭代器型別來表示範圍外,它的第三個引數型別是乙個謂詞。謂詞是乙個可呼叫表示式,分為一元謂詞 只接受乙個引數 二元謂詞 接受兩個引數 比如說常用的sort演算法,它的第三個引數就是乙個二元謂詞。include include include inclu...