c++ Lambda表达式简介

Lambda表达式

C++11标准的lambda引入的主要目的是:

能够将类似于函数的表达式用作接受函数指针或函数符的函数参数,因此,典型的lambda表达式是测试表达式或者比较表达式,可编写为一条语句,这使得lambda简洁而易于理解。

1、一个lambda表达式有如下类型:

[capture list](parameter list)->returntype{function body}

Capture list是(捕获列表)一个lambda所在的函数中定义的局部函数变量的列表,return type、parameter list、function list分别表示返回类型、参数列表和函数体。

2、lambda捕获和返回

(1)、值捕获

Size_tv1=23;

autof2=[v1]{return v1;}

v1=0;

autoj=f();//j=23

(2)、引用捕获

Size_tv2=34;

autof2=[&v2]{return v2;}

v1=0;

autoj=f();//j=0

(3)、隐式捕获

W=find_if(q.begin(),q.end(),[=](conststring &s){return s.size()>=sz;})//=为值捕获,&为引用捕获

(4)、可变的lambda

如果希望改变被捕获的变量,就必须在参数前加上mutable,如以下例子:

Size_tv1=23;

autof2=[v1]()mutable{return ++v1;}

v1=0;

autoj=f();//j=23//j=24

Size_tv2=34;

autof2=[&v2]{return ++v2;}

v1=0;

autoj=f();//j=1

lambda的捕获列表

[]-------空捕获列表,lambda不能使用所在的函数变量,一个lambda只能在捕获变量后才能使用它;

[names]--------names是一个逗号分隔的名字列表;

[&]----------隐式捕获列表,采用引用捕获方式;

[=]-----------隐式捕获列表,采用值捕获方式;

使用示例代码:

/*lambda表达式的使用*/
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<ctime>
using namespace std;
void lambda(){
	vector<int> numbers(Size);
	srand(time(0));//以时间作为随机种子
	generate(numbers.begin(),numbers.end(),rand);//生成随机数并且加入容器中 

	cout<<"SIZE="<<numbers.size()<<'\n';//容器的大小
	int count3=count_if(numbers.begin(),numbers.end(),[](int x){return x%3==0;});//lambda表达式实现整除于3的计算个数
	cout<<"count3="<<count3<<'\n';

	int count13=0;
	for_each(numbers.begin(),numbers.end(),[&count13](int x){count13+=x%13==0;});
	cout<<"count13="<<count13<<'\n';

	count3=count13=0;
	for_each(numbers.begin(),numbers.end(),[&](int x){count3+=x%3==0;count13==x%13==0;});
	cout<<"count3="<<count3<<'\n';
	cout<<"count13="<<count13<<'\n';
}
int main(){
	lambda();
	return 0;
}

(全文完)

时间: 2024-08-07 00:17:24

c++ Lambda表达式简介的相关文章

C++ lambda 表达式 简介

自己根据对lambda表达式的理解,做了一套ppt简单介绍 原文地址:https://www.cnblogs.com/Phoenix-blog/p/8988316.html

Java8的Lambda表达式简介

先阐述一下JSR(Java Specification Requests)规范,即Java语言的规范提案.是向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都可以提交JSR,可以向Java平台增添新的API和服务.JSR已成为Java界的一个重要标准.可以理解为JSR是Java开发者以及授权者指定的标准,而Java开发者以及授权者形成一个JCP国际组织.职能是制定Java标准,即所有的规范都是有迹可循的. 在Java8中推出的lambda表达式

java8新特性之——lambda表达式的使用

lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升. Lambda表达式的语法(记得要在jdk1.8及以上的jdk环境下实验) Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->&

好程序员分享java8新特性之Lambda表达式

?.Lambda表达式简介 什么是Lambda? Lambda表达式是Java 8推出的?个新特性.从本质上讲,Lambda表达式是?个匿名函数. 为什么要使?Lambda? 使?Lambda表达式可以对?个接?进??常简洁的实现. 之前我们在给?个接?引?赋值的时候,可以使?接?实现类,或者匿名内部类.但是有了 Lambda表达式,我们可以更加?便的实现这个需求. interface Comparator<T>?{ int compare(T o1, T o2); } class Progr

Java8 Lambda表达式详解手册及实例

先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下Java8的新特性.Lambda表达式已经在新框架中普通使用了,如果你对Lambda还一无所知,真得认真学习一下本篇文章了. 现在进入正题Java8的Lambda,首先看一下发音 ([?l?md?])表达式.注意该词的发音,b是不发音的,da发[d?]音. 为什么要引入Lambda表达式 简单的来说,引入La

Java8特性Lambda表达式

Lambda 表达式 简介: Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). (parameters) -> expression 或 (parameters) ->{ statements; } 使用 Lambda 表达式需要注意以下两点: Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口.在上面例子中,我们使用各种类型的Lambda表达式来定义MathO

Lambda 表达式的简介及形成过程

Lambda 表达式的简介及形成过程 C#的Lambda表达式是一种"语法糖",使用 Lambda 运算符 =>,该运算符读为"goes to".语法如下: 形参列表=>函数体 函数体多于一条语句的可用大括号括起. 要了解Lambda表达式,首先就要了解什么是委托,委托(delegate)是一种引用类型.简单讲,委托就是一个函数指针.先看一个例子 //声明一个委托 public delegate int DelegateAdd(int a, int b)

不一样的编码风格--Lambda表达式

Lambda表达式也是C#3.0中最重要的特性之一. 1.Lambda表达式的简介 Lambda表达式可以理解为一个匿名方法,它可以包含表达式和语句,并且用于创建委托或转换为表达式树.在使用Lambda表达式时,都会使用“=>”运算符,该运算符的左边是匿名方法的输入参数,右边则是表达式或语句块. 1.1 Lambda表达式的演变过程 其实Lambda表达式是匿名方法的投胎转世.下面以代码来鉴定: 1 C# 1.0 2 Func<string,int> delegatetest1=new

Lambda表达式详解【转】

前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”.运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体. lambda表达式: 1.一个参数:param=>expr 2