最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實例詳解lambda表達式的使用

 更新時間:2022年05月04日 11:07:20   作者:liufeng2023  
Lambda表達式是現代C++在C ++ 11和更高版本中的一個新的語法糖 ,在C++11、C++14、C++17和C++20中Lambda表達的內容還在不斷更新。 lambda表達式(也稱為lambda函數)是在調用或作為函數參數傳遞的位置處定義匿名函數對象的便捷方法

lambda表達式

  • C++11 函數對象的升級版 =》 lambda表達式
  • 函數對象的缺點:(需要定義一個類)
  • 函數對象使用在 泛型算法參數傳遞 比較性質/自定義操作 優(yōu)先級隊列 智能指針(自定義智能指針的刪除器)

lambda表達式原理: 就是函數對象更高級的實現!

1、lambda表達式語法

在這里插入圖片描述

例1:

lambda表達式對應函數對象小括號重載函數的。

在這里插入圖片描述

  • []為空,相當于構造函數不接收任何外部傳進來的變量。
  • ()是運算符重載函數,具體接收的參數的個數
  • 然后是返回值,看是無類型還是其他類型。
  • 最后是函數代碼

在這里插入圖片描述

在這里插入圖片描述

[]不為空,相當于構造函數接收任何外部傳進來的變量a,b。

例2:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

如果lambda表達式的返回值不需要,那么"->返回值"可以省略的

在這里插入圖片描述

[捕獲外部變量]

[]:表示不捕獲任何外部變量
[=]:以傳值的方式捕獲外部的所有變量
[&]:以傳引用的方式捕獲外部的所有變量
[this]:捕獲外部的this指針
[=,&a]:以傳值的方式捕獲外部的所有變量,但是a變量以傳引用的方式捕獲
[a, b]:以值傳遞的方式捕獲外部變量a和b
[a, &b]:a以值傳遞捕獲,b以傳引用的方式捕獲

值傳遞:

加上mutable,表示將值傳遞的形參a,b改掉;不影響外部的實參。

在這里插入圖片描述

引用傳遞:

修改的是實參,不需要加mutable

在這里插入圖片描述

2、lambda應用

例1—從大到小排序

在這里插入圖片描述

在這里插入圖片描述

例2—按序插入元素65

在這里插入圖片描述

在這里插入圖片描述

例3—for_each

在這里插入圖片描述

在這里插入圖片描述

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	vector<int> vec;
	for (int i = 0; i < 20; i++)
	{
		vec.push_back(rand() % 100 + 1);
	}
	sort(vec.begin(), vec.end(), [](int a, int b)->bool
		{
			return a > b;
		});
	for (int val : vec)
	{
		cout << val << " ";
	}
	cout << endl;
	//65按序插入序列  要找第一個小于65的數字
	auto it = find_if(vec.begin(), vec.end(),
		[](int a)->bool {return a < 65; });
	if (it != vec.end())
	{
		vec.insert(it, 65);
	}
	for (int val : vec)
	{
		cout << val << " ";
	}
	cout << endl;
	for_each(vec.begin(), vec.end(), [](int a)
		{
			if (a % 2 == 0)
				cout << a << " ";
		});
	cout << endl;
	return 0;
}

3、lambda表達式的應用實踐

既然lambda表達式只能使用在語句當中,如果想跨語句使用之前定義好的lambda表達式,怎么辦?用什么類型來表示lambda表達式?

  • lambda表達式 =》 函數對象 用function類型綁定它
  • 用function類型表示函數對象的類型
  • bind綁定器綁定的結果依然還是一個函數對象;

1、計算器案例

在這里插入圖片描述

2、智能指針案例

在這里插入圖片描述

3、優(yōu)先級隊列

在這里插入圖片描述

上面寫法靈活性太差?,F在優(yōu)化:

在這里插入圖片描述

priority_queue本身就有3個模板參數,分別是元素類型、容器類型、函數對象。

可以接收外部自定義的函數對象:

在這里插入圖片描述

#include <iostream>
#include <functional>
#include <queue>
using namespace std;
class Data
{
public:
    Data(int val1 = 10, int val2 = 10) :ma(val1), mb(val2) {}
    int ma;
    int mb;
};
int main()
{
    //優(yōu)先級隊列
    //priority_queue<Data> queue;
    using FUNC = function<bool(Data&, Data&)>;
    priority_queue<Data, vector<Data>, FUNC>
        maxHeap([](Data& d1, Data& d2)->bool
            {
                return d1.mb > d2.mb;
            });
    maxHeap.push(Data(10, 20));
    maxHeap.push(Data(15, 15));
    maxHeap.push(Data(20, 10));
    return 0;
}

到此這篇關于C語言實例詳解lambda表達式的使用的文章就介紹到這了,更多相關C語言lambda內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 希爾排序算法的C語言實現示例

    希爾排序算法的C語言實現示例

    這篇文章主要介紹了希爾排序算法的C語言實現示例,希爾排序可以看作為一種高級的插入排序,需要的朋友可以參考下
    2016-04-04
  • C++ operator關鍵字(重載操作符)的用法詳解

    C++ operator關鍵字(重載操作符)的用法詳解

    下面小編就為大家?guī)硪黄狢++ operator關鍵字(重載操作符)的用法詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++ STL標準庫std::vector的使用詳解

    C++ STL標準庫std::vector的使用詳解

    vector 是表示可以改變大小的數組的序列容器,本文主要介紹了C++ STL標準庫std::vector的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于C語言實現簡單五子棋游戲

    基于C語言實現簡單五子棋游戲

    這篇文章主要為大家詳細介紹了基于C語言實現簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言字符串替換空格實例詳解

    C語言字符串替換空格實例詳解

    這篇文章主要為大家詳細介紹了C語言字符串替換空格實例,使用數據庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • QT5.12.5移植到ARM平臺下的方法步驟

    QT5.12.5移植到ARM平臺下的方法步驟

    本文主要介紹了QT5.12.5移植到ARM平臺下的方法步驟,包括修改配置文件、代碼修改以及測試運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • C語言仿QQ聊天界面抖動功能

    C語言仿QQ聊天界面抖動功能

    這篇文章主要為大家詳細介紹了C語言仿QQ聊天界面抖動功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 深入解析C++編程中基類與基類的繼承的相關知識

    深入解析C++編程中基類與基類的繼承的相關知識

    這篇文章主要介紹了C++編程中基類與基類的繼承的相關知識,包括多個基類繼承與虛擬基類等重要知識,需要的朋友可以參考下
    2016-01-01
  • C語言 解壓華為固件的實例代碼

    C語言 解壓華為固件的實例代碼

    這是解壓華為固件(update.app)的C語言。。其實這也是我翻115翻出來的。。。
    2013-08-08
  • C++實現鄰接表頂點的刪除

    C++實現鄰接表頂點的刪除

    這篇文章主要為大家詳細介紹了C++實現鄰接表頂點的刪除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

方城县| 元朗区| 高密市| 兴文县| 达拉特旗| 河间市| 县级市| 定襄县| 乌拉特中旗| 林口县| 南安市| 基隆市| 灵武市| 屏南县| 沂南县| 介休市| 杭州市| 沽源县| 客服| 佛山市| 潜山县| 延川县| 新津县| 宣恩县| 青田县| 丁青县| 翁牛特旗| 子长县| 陆川县| 临漳县| 井研县| 广灵县| 徐州市| 罗田县| 武强县| 澜沧| 文昌市| 巧家县| 德化县| 盈江县| 昌图县|