广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实例详解lambda表达式的使用
  • 555
分享到

C++实例详解lambda表达式的使用

2024-04-02 19:04:59 555人浏览 薄情痞子
摘要

目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 c++11 函数对

lambda表达式

  • c++11 函数对象的升级版 =》 lambda表达式
  • 函数对象的缺点:(需要定义一个类)
  • 函数对象使用在 泛型算法参数传递 比较性质/自定义操作 优先级队列 智能指针(自定义智能指针的删除器)

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、优先级队列

在这里插入图片描述

上面写法灵活性太差。现在优化

在这里插入图片描述

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()
{
    //优先级队列
    //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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实例详解lambda表达式的使用

本文链接: https://www.lsjlt.com/news/147906.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2022-11-13
  • C++Lambda表达式详解
    目录概述语法分析捕获列表关键字声明示例捕获列表按值传递总结概述 C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下: ...
    99+
    2022-11-12
  • C#3.0中Lambda表达式详解
    在C#2.0中,微软给我们带来了一些新的特性,例如泛型,匿名委托等。然而,这些新的特性多多少少会给人一种从别的语言中“抄”来的感觉(例如泛型类似C++的模板,一些特性类似Java中的...
    99+
    2022-11-15
    C# Lambda
  • C++学习之Lambda表达式的用法详解
    目录简介捕获原理Lambda回调简介 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中...
    99+
    2022-11-13
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
  • C++中Lambda表达式的语法与实例
    目录概述 语法分析 捕获列表 关键字声明 mutableexception示例 捕获列表按值传递捕获列表按引用传递总结概述 C++ 11 中的 Lambda 表达式用于定义并创建匿...
    99+
    2022-11-12
  • C# 内部类与Lambda表达式用法详解
    目录一、内部类1.什么是内部类?1.类作为形参和返回值:2.内部类的几种形式二、Lambda表达式(强调做什么,而不是以什么形式去做)1.Lambda表达式的格式要求:2.Lambd...
    99+
    2022-11-12
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • Java使用lambda表达式简化代码的示例详解
    目录目的推理一下实现接口,使用方法内部类实现接口,使用方法局部内部类实现接口,使用方法匿名内部类实现接口,使用方法使用lamda表达式的,实现方法可带参数只有一个参数有返回值只有一条...
    99+
    2022-11-13
    Java lambda表达式简化代码 Java lambda表达式 Java 简化代码
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • C++lambda表达式使用介绍
    目录前言lambda表达式格式一些语法走进底层前言 C++98中的一个例子。 #include <iostream> #include <vector> #i...
    99+
    2022-11-13
  • Java 8的Lambda表达式详解
    本篇内容介绍了“Java 8的Lambda表达式详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能接口只包含一个方法的接口被称为功能接口...
    99+
    2023-06-17
  • Java的Lambda表达式使用实例分析
    这篇文章主要讲解了“Java的Lambda表达式使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的Lambda表达式使用实例分析”吧!Lambada 简介lambda 表达...
    99+
    2023-07-05
  • Java8 lambda表达式的10个实例讲解
    目录例1、用lambda表达式实现Runnable例2、使用Java 8 lambda表达式进行事件处理例3、使用lambda表达式对列表进行迭代例4、使用lambda表达式和函数式...
    99+
    2022-11-13
  • Java学习之Lambda表达式的使用详解
    目录Lamda表达式函数式接口Lambda表达式的推导函数式接口的不同类型Lambda表达式与函数式接口的简单应用Lambda表达式的优缺点Lamda表达式 λ希腊字母...
    99+
    2022-12-26
    Java Lambda表达式用法 Java Lambda表达式 Java Lambda
  • python中的lambda表达式用法详解
    本文实例讲述了python中的lambda表达式用法。分享给大家供大家参考,具体如下: 这里来为大家介绍一下lambda函数。 lambda 函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以...
    99+
    2022-06-04
    表达式 详解 python
  • Java中Lambda表达式使用详细解读
    目录前言一、Lambda表达式的简介二、Lambda表达式对接口的要求1.函数式接口2.@FunctionalInterface3.Lambda表达式的语法1.Lambda表达式的基...
    99+
    2023-05-18
    java  Lambda表达式使用 java  Lambda表达式 Lambda表达式使用
  • C++11的lambda表达式怎么使用
    这篇文章主要讲解了“C++11的lambda表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的lambda表达式怎么使用”吧!可变lambda假设有如下vector,保...
    99+
    2023-06-19
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2022-11-13
  • C#中如何使用Lambda表达式
    本篇文章为大家展示了C#中如何使用Lambda表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C# Lambda表达式我们从“所有字符串查找包含YJingLee子字符串”说起。在C# 2.0中,...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作