成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++使用Lambda表達(dá)式實(shí)例講解

開發(fā) 后端
以下是一個(gè)深入講解 C++ 使用 Lambda 表達(dá)式的例子,包括基本語法、捕獲列表、函數(shù)調(diào)用、以及與 STL 的結(jié)合使用等。

C++ 中的 Lambda 表達(dá)式是一種匿名函數(shù),可以方便地創(chuàng)建并傳遞函數(shù)對(duì)象。這是 C++11 引入的一項(xiàng)重要功能,可以大大提高代碼的可讀性和簡潔性。

以下是一個(gè)深入講解 C++ 使用 Lambda 表達(dá)式的例子,包括基本語法、捕獲列表、函數(shù)調(diào)用、以及與 STL 的結(jié)合使用等。

Lambda基本語法

首先,我們來看一個(gè)最簡單的 lambda 表達(dá)式:

[](){/* do nothing */};

這個(gè) lambda 表達(dá)式定義了一個(gè)空函數(shù),沒有參數(shù),也沒有返回值。你可以將其看作是一個(gè)沒有實(shí)體的具名函數(shù)。

你還可以定義帶有參數(shù)的 lambda 表達(dá)式:

[](int a, float b){return a + b;};

這個(gè)函數(shù)接收兩個(gè)參數(shù),一個(gè)是 int 類型的 a,另一個(gè)是 float 類型的 b。它的返回值是 a  b 的和。

你也可以定義帶有默認(rèn)參數(shù)的 lambda 表達(dá)式:

[](int a, float b = 0.0f){return a + b;};

這個(gè)函數(shù)和上一個(gè)函數(shù)功能基本相同,只是 b 參數(shù)的默認(rèn)值是 0.0f

Lambda的捕獲列表

你還可以在 lambda 表達(dá)式中捕獲外部變量的值:

int a = 10;
float b = 20.0f;
auto add = [&a, &b]() { return a + b; }; // 使用引用捕獲外部變量
std::cout << add() << std::endl; // 輸出 30

在這個(gè)例子中,&a  &b 是通過引用來捕獲 a  b 的值的。這意味著 lambda 表達(dá)式可以修改捕獲的變量的值。如果你只想在 lambda 表達(dá)式中使用外部變量的值,而不修改它們的值,你應(yīng)該使用值捕獲而不是引用捕獲。例如:

int a = 10;
float b = 20.0f;
auto add = [a, b]() { return a + b; }; // 使用值捕獲外部變量
std::cout << add() << std::endl; // 輸出 30

在這個(gè)例子中,雖然 a  b 的值被傳遞給了 lambda 表達(dá)式,但是 lambda 表達(dá)式并不能修改它們的值。

Lambda與函數(shù)調(diào)用

你可以將 lambda 表達(dá)式作為一個(gè)函數(shù)參數(shù)傳遞給其他函數(shù)。例如,你可以使用一個(gè) lambda 表達(dá)式來作為 std::sort 函數(shù)的比較函數(shù):

std::vector<int> v = {5, 3, 1, 4, 2};
std::sort(v.begin(), v.end(), [](int a, int b) {return a < b;}); // 使用 lambda 表達(dá)式作為比較函數(shù)
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; // 輸出 1 2 3 4 5

在這個(gè)例子中,lambda 表達(dá)式 [](int a, int b) {return a < b;} 被傳遞給了 std::sort 函數(shù),用于比較 v 中的元素。這意味著你可以用 lambda 表達(dá)式來實(shí)現(xiàn)自定義的算法和數(shù)據(jù)結(jié)構(gòu)。

Lambda與 STL 的結(jié)合使用

下面我們?cè)賮砜匆粋€(gè)比較復(fù)雜但很有用的例子:使用 lambda 表達(dá)式和 STL 來查找一個(gè) vector 中第一個(gè)出現(xiàn)的不重復(fù)的元素:

#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_set>

int main() {
    std::vector<int> v = {1, 2, 3, 2, 4, 3, 5, 6, 4};
    auto it = std::find_if(v.begin(), v.end(), [&](int a) {
    	return std::find(std::begin(un), std::end(un), a) == std::end(un);
    }); 
   }

在這個(gè)例子中,我們使用了一個(gè)較為復(fù)雜的 lambda 表達(dá)式來作為 std::find_if 函數(shù)的比較函數(shù)。這個(gè) lambda 表達(dá)式接收一個(gè)參數(shù) a,然后使用一個(gè)名為 un  std::unordered_set 來查找 a 是否第一次出現(xiàn)。這個(gè)例子展示了如何使用 lambda 表達(dá)式和 STL 來解決一個(gè)復(fù)雜的問題。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-09-25 13:28:14

C++Lambda

2020-10-16 06:40:25

C++匿名函數(shù)

2022-09-19 14:12:27

C++Lambda表達(dá)式

2009-08-27 09:44:59

C# Lambda表達(dá)

2023-03-23 18:40:18

Lambda編程C++

2009-08-27 09:57:50

C# Lambda表達(dá)

2009-08-26 16:17:23

C# Lambda表達(dá)

2024-03-25 13:46:12

C#Lambda編程

2009-08-10 09:41:07

.NET Lambda

2013-04-10 10:58:19

LambdaC#

2009-08-31 17:11:37

Lambda表達(dá)式

2009-07-09 09:51:07

Lambda表達(dá)式C#

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達(dá)式

2009-07-01 09:56:10

C#3.0

2021-08-31 07:19:41

Lambda表達(dá)式C#

2009-09-11 09:48:27

Linq Lambda

2011-05-20 17:50:45

C#

2009-09-15 17:30:00

Linq Lambda
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产一级特黄aaa大片评分 | 欧美一区二区在线观看 | 亚洲人成人一区二区在线观看 | 国内自拍偷拍 | 国产成人啪免费观看软件 | 亚洲一区二区三区免费视频 | 小视频你懂得 | 福利网站导航 | 精品国产三级 | 亚洲精品一区二区 | 亚洲精品在线免费观看视频 | 欧美性受xxx | 少妇性l交大片免费一 | www.久久久久久久久久久 | 日韩精品在线看 | 97国产精品 | 亚洲视频一区二区三区 | 亚洲二区精品 | 精品成人69xx.xyz | 午夜大片 | 国产一区二区三区在线 | 亚洲自拍偷拍免费视频 | 国产乱码精品1区2区3区 | 欧美一级免费看 | 在线观看av网站 | 91av亚洲 | 男女羞羞视频在线免费观看 | 精品国产一二三区 | 久久久999免费视频 999久久久久久久久6666 | 99精品久久| 人人cao| 亚洲精品久久久9婷婷中文字幕 | 伊人一区 | 久久久高清 | 日本成人一区二区 | 三级av免费 | 天天人人精品 | 国产成人在线看 | 欧美专区日韩 | 九九精品在线 | 亚洲aⅴ精品 |