首页 > 其他分享 >5-19打卡:lambda表达式

5-19打卡:lambda表达式

时间:2023-05-21 15:11:06浏览次数:39  
标签:变量 19 捕获 int 函数 打卡 lambda 表达式 Lambda

Lambda 表达式是 C++11 引入的一种非常方便和强大的功能,它允许你创建简洁、匿名的函数对象。在许多情况下,Lambda 表达式可以使代码更简洁、易读。接下来,我会详细介绍 C++ Lambda 表达式的基本概念、语法以及一些使用场景。

  1. Lambda 表达式基本概念
    Lambda 表达式是一个匿名的内联函数,它可以捕获外部作用域中的变量并在其内部使用。Lambda 表达式的结果是一个可调用的函数对象,你可以将其赋值给一个变量,或者直接调用它。

  2. Lambda 表达式语法
    Lambda 表达式的基本语法如下:

[capture](parameters) -> return_type { body }

capture:捕获列表,用于捕获外部作用域中的变量。
parameters:参数列表,和普通函数的参数列表类似。
return_type:返回类型,可以省略,编译器会根据函数体的内容自动推导。
body:函数体。

  1. 捕获列表
    捕获列表用于指定 Lambda 表达式可以访问的外部作用域中的变量。捕获列表可以有以下几种形式:

[=]:以值捕获所有外部作用域的变量。
[&]:以引用捕获所有外部作用域的变量。
[x]:以值捕获变量 x。
[&x]:以引用捕获变量 x。
[=, &x]:以值捕获所有变量,但是以引用捕获变量 x。
[&, x]:以引用捕获所有变量,但是以值捕获变量 x。

  1. 示例
    以下是一些使用 Lambda 表达式的简单示例:

例1:一个简单的 Lambda 表达式,没有参数、捕获和返回值。

#include <iostream>

int main() {
    auto hello = [] { std::cout << "Hello, Lambda!" << std::endl; };
    hello(); // 输出:Hello, Lambda!
    return 0;
}

例2:一个带参数的 Lambda 表达式,计算两个整数的和。

#include <iostream>

int main() {
    auto sum = [](int a, int b) { return a + b; };
    std::cout << "3 + 4 = " << sum(3, 4) << std::endl; // 输出:3 + 4 = 7
    return 0;
}

例3:一个捕获外部变量的 Lambda 表达式,计算平方。

#include <iostream>

int main() {
    int x = 3;
    auto square = [x] { return x * x; };
    std::cout << "x * x = " << square() << std::endl; // 输出:x * x = 9
    return 0;
}
  1. 使用场景
    Lambda 表达式在很多场景下都非常有用,例如:
    作为参数传递给其他函数,如 std::sort, std::find_if 等。
    简化一些简单的函数定义,使代码更简洁。
    用于创建自定义的比较函数或谓词函数。

标签:变量,19,捕获,int,函数,打卡,lambda,表达式,Lambda
From: https://www.cnblogs.com/wlxdaydayup/p/17418644.html

相关文章

  • 5.21打卡
      三、程序流程图 四、代码实现#include<bits/stdc++.h>usingnamespacestd;main(){longn,sum,i;while(scanf("%ld",&n)!=EOF){printf("ÔÚ1-%ldÖ®¼äµÄ½×ÌÝÊýΪ£º\n",n);sum=0;for(i=7;i<=n......
  • 第28天打卡
    问题: 源代码:#include<stdio.h>#include<math.h>intmain(){inta,b,c,count=0;for(a=1;a<=100;a++){c=(int)sqrt(a*a+b*b);if(c*c==a*a+b*b&&a+b>c&&b+c>a&&c<=100){printf("%4d%4d%4d ",a,b,c);cou......
  • c++打卡第三十二天
    以点类Point及平面图形类Plane为基础设计圆类Circle一、问题描述以点类Point及平面图形类Plane为基类公有派生圆类Circle,main(void)函数完成对其的测试。Point类结构说明:Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①有参构造......
  • 每日打卡
    素数问题描述:求一个范围内的所有素数问题分析:素数指除了1和本身外没有因数的数,2是最小的素数,所以判断一个数是否为质数可以看从2到其平方根的范围内有没有其的因数,有整数平方根的数不可能是素数代码:#include<stdio.h>#include<math.h>intmain(){intstart,end,i,k,m,count......
  • 图解LeetCode——19. 删除链表的倒数第 N 个结点
    一、题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。二、示例2.1>示例1:【输入】head=[1,2,3,4,5],n=2【输出】[1,2,3,5]2.2>示例2:【输入】head=[1],n=1【输出】[]2.3>示例3:【输入】head=[1,2],n=1【输出】[1]提示:链......
  • 5月19日打卡
    例5-1题目:作用域实例clude<iostream>usingnamespacestd;inti;intmain#in(){i=5;{inti;i=7;cout<<"i="<<i<<endl;}cout<<"i="<<i<<endl;retur......
  • 5.20打卡
      3.程序流程图4.代码实现#include<bits/stdc++.h>usingnamespacestd;intmain(){intt,a[5];longintk,i;for(i=95860;;i++){for(t=0,k=100000;k>=10;t++){a[t]=(i%k)/(k/10);k/=10;......
  • 打卡第二十九天
    多边形周长计算一、1.先定义一个多变型类,定义边长,输入函数,输出函数2.定义派生类矩形类,等边类二、三、#include<iostream>usingnamespacestd;classpolygon{protected: intnumber;private: intside_length[100];public: polygon()=default; polygon(intn) { number=......
  • 每天打卡一小时 第三十一天 PTA520钻石 争霸赛
    第一题  源代码#include<iostream>usingnamespacestd;intmain(){intn;cin>>n;cout<<"520"<<n<<"Times!";}第一题,简简单单打印输出第二题 源代码#include<iostream>usingnamespacestd;intmain(......
  • 【题解】CF193D Two Segments
    题意给定一个\(1\simN\)的排列,在这个排列中选出两段互不重叠的区间,求使选出的元素排序后构成公差为1的等差数列的方案数。选出的两段区间中元素构成的集合相同时视为同一种方案。\(1\leN\le3\times10^5\)。传送门分析如果考虑怎么优化枚举的两个区间的话,发现不太好搞(反正......