日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

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

來(lái)源: 責(zé)編: 時(shí)間:2023-11-02 09:09:01 257觀看
導(dǎo)讀C++ 中的 Lambda 表達(dá)式是一種匿名函數(shù),可以方便地創(chuàng)建并傳遞函數(shù)對(duì)象。這是 C++11 引入的一項(xiàng)重要功能,可以大大提高代碼的可讀性和簡(jiǎn)潔性。以下是一個(gè)深入講解 C++ 使用 Lambda 表達(dá)式的例子,包括基本語(yǔ)法、捕獲列表、

kHQ28資訊網(wǎng)——每日最新資訊28at.com

C++ 中的 Lambda 表達(dá)式是一種匿名函數(shù),可以方便地創(chuàng)建并傳遞函數(shù)對(duì)象。這是 C++11 引入的一項(xiàng)重要功能,可以大大提高代碼的可讀性和簡(jiǎn)潔性。kHQ28資訊網(wǎng)——每日最新資訊28at.com

以下是一個(gè)深入講解 C++ 使用 Lambda 表達(dá)式的例子,包括基本語(yǔ)法、捕獲列表、函數(shù)調(diào)用、以及與 STL 的結(jié)合使用等。kHQ28資訊網(wǎng)——每日最新資訊28at.com

Lambda基本語(yǔ)法

首先,我們來(lái)看一個(gè)最簡(jiǎn)單的 lambda 表達(dá)式:kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

這個(gè) lambda 表達(dá)式定義了一個(gè)空函數(shù),沒(méi)有參數(shù),也沒(méi)有返回值。你可以將其看作是一個(gè)沒(méi)有實(shí)體的具名函數(shù)。kHQ28資訊網(wǎng)——每日最新資訊28at.com

你還可以定義帶有參數(shù)的 lambda 表達(dá)式:kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

這個(gè)函數(shù)接收兩個(gè)參數(shù),一個(gè)是 int 類型的 a,另一個(gè)是 float 類型的 b。它的返回值是 a  b 的和。kHQ28資訊網(wǎng)——每日最新資訊28at.com

你也可以定義帶有默認(rèn)參數(shù)的 lambda 表達(dá)式:kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

這個(gè)函數(shù)和上一個(gè)函數(shù)功能基本相同,只是 b 參數(shù)的默認(rèn)值是 0.0fkHQ28資訊網(wǎng)——每日最新資訊28at.com

Lambda的捕獲列表

你還可以在 lambda 表達(dá)式中捕獲外部變量的值:kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

在這個(gè)例子中,&a  &b 是通過(guò)引用來(lái)捕獲 a  b 的值的。這意味著 lambda 表達(dá)式可以修改捕獲的變量的值。如果你只想在 lambda 表達(dá)式中使用外部變量的值,而不修改它們的值,你應(yīng)該使用值捕獲而不是引用捕獲。例如:kHQ28資訊網(wǎng)——每日最新資訊28at.com

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á)式并不能修改它們的值。kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

你可以將 lambda 表達(dá)式作為一個(gè)函數(shù)參數(shù)傳遞給其他函數(shù)。例如,你可以使用一個(gè) lambda 表達(dá)式來(lái)作為 std::sort 函數(shù)的比較函數(shù):kHQ28資訊網(wǎng)——每日最新資訊28at.com

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á)式來(lái)實(shí)現(xiàn)自定義的算法和數(shù)據(jù)結(jié)構(gòu)。kHQ28資訊網(wǎng)——每日最新資訊28at.com

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

下面我們?cè)賮?lái)看一個(gè)比較復(fù)雜但很有用的例子:使用 lambda 表達(dá)式和 STL 來(lái)查找一個(gè) vector 中第一個(gè)出現(xiàn)的不重復(fù)的元素:kHQ28資訊網(wǎng)——每日最新資訊28at.com

#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á)式來(lái)作為 std::find_if 函數(shù)的比較函數(shù)。這個(gè) lambda 表達(dá)式接收一個(gè)參數(shù) a,然后使用一個(gè)名為 un  std::unordered_set 來(lái)查找 a 是否第一次出現(xiàn)。這個(gè)例子展示了如何使用 lambda 表達(dá)式和 STL 來(lái)解決一個(gè)復(fù)雜的問(wèn)題。kHQ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16511-0.htmlC++使用Lambda表達(dá)式實(shí)例講解

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 聊一聊 Python 的換行以及轉(zhuǎn)義

下一篇: 不是吧?這 十個(gè) React UI 組件庫(kù)你不會(huì)還不知道吧?

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 剑阁县| 九台市| 军事| 抚宁县| 罗江县| 兴宁市| 宁远县| 全南县| 北辰区| 通道| 瓦房店市| 岳阳市| 石泉县| 长汀县| 肥城市| 兰溪市| 清新县| 曲松县| 南开区| 长白| 黔西| 中山市| 蓬莱市| 晴隆县| 海口市| 邮箱| 丹寨县| 枣庄市| 固安县| 门源| 都昌县| 平度市| 论坛| 龙山县| 抚顺市| 昂仁县| 武夷山市| 盐津县| 剑川县| 内丘县| 根河市|