C++11 新特性之 Lambda表达式

lambda表达式可以用于创建并定义匿名的函数对象,以简化编程工作

Lambda的语法如下:

[函数对象参数](操作符重载函数参数)->返回值类型{函数体}

[]内的参数指的是Lambda表达式可以取得的变量。(2)函数中的param就是指函数可以得到在Lambda表达式外的全局变量,

如果在[]中传入=的话,即是可以取得所有的外部变量,如(1)和(3)Lambda表达式

()内的参数是每次调用函数时传入的参数。

->后加上的是Lambda表达式返回值的类型,如(3)中返回了一个int类型的变量

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void func(int &x)
{
	cout << x;
}

int main()
{
	vector<int> iv{0, 1, 2, 3};
	for_each(iv.begin(), iv.end(), func);
	cout << endl;

	for_each(iv.begin(), iv.end(), [=](int &x){ cout << x; });             //(1)
	cout << endl;

	int param = 1;
	for_each(iv.begin(), iv.end(), [param](int &x){ cout << x + param; }); //(2)
	cout << endl;

	for_each(iv.begin(), iv.end(), [=](int&x)->int{ return x; });          //(3)

	return 0;
}

C++11 新特性之 Lambda表达式,布布扣,bubuko.com

时间: 2024-10-08 09:46:17

C++11 新特性之 Lambda表达式的相关文章

C++11新特性(3) lambda表达式(1)

C++11添加了一项名为lambda表达式的新功能.通过这项功能能编写内嵌的匿名函数,而不必编写独立函数或函数对象,使得代码更加理解. lambda表达式包含以下部分. [capture_block](parameters) mutable exception_specification->return_type {body} 现在分析各个部分的内容: (capture_block)捕捉块:指定如何捕捉所在作用域的变量,并供给lambda主体部分使用. (parameter)参数(可选):lam

c++11 新特性之lambda表达式

写过c#之后,觉得c#里的lambda表达式和delegate配合使用,这样的机制用起来非常爽.c++11也有了lambda表达式,形式上有细小的差异.形式如下: c#:(input parameters) => {statement;} c++:[capture list](parameter list) -> return type {statement;} c++lambda表达式共分为4各部分.其中parameter list 和 return type 是可以在特定情况下省略的. 一

C++11新特性:Lambda函数(匿名函数)

声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html 加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了.匿名函数在很多时候可以为编码提供便利,这在下文会提到.很多语言中的匿名函数,如C++,都是用Lambda表达式实现的.Lambda表达式又称为lambda函数.我在下文中称之为Lambda函数. 为了明白Lambda函数的用处,请务必先搞明白C++中的自动

c++11新特性(4) lambda捕捉块

lambda表达式中的方括号成为捕捉块,可以在这里指定如何从所在的作用域中捕捉变量. 捕捉的意思是指可以在该lambda中使用该变量.即可以捕获外部变量在lambda表达式内使用. 可以使用两种方式来捕捉所在的作用域中的所有变量. [=]:通过值捕捉所有变量 [&]:通过引用捕捉所有变量 指定空白的捕捉块[]表示不从所在作用域中捕捉变量. 还可以指定捕捉哪些变量以及这些变量的捕捉方法. [&x],只通过引用捕捉x,不捕捉其他变量. [x] 只通过值捕捉x,不捕捉其他变量. [=,&

JDK1.8新特性(二): Lambda表达式 (参数列表) -&gt; { } 和函数式接口@FunctionalInterface

Lambda表达式 二:简介 JDK的升级的目的有以下几个:增加新的功能.修复bug.性能优化.简化代码等几个方面,Lambda表达式就是属于简化代码,用于简化匿名实现类,提供一种更加简洁的写法.Lambda表达式在Swift语言中称之为代码块,Lambda表达式可以认为是一种特殊的接口,该接口必须只有一个抽象方法. 语法 (参数类型 参数名, 数参数类型 参数名2...) -> { // code }; 小括号()中的内容就是方法中的参数列表包括参数类型.参数名,其中参数类型是可以省略的,当参

jdk1.8新特性之lambda表达式

lambda表达式其实就是指一个匿名函数,应用最广泛的就是匿名内部类.在jdk1.8之前,我们定义一个匿名内部类可能需要写一大坨代码,现在有了lambda之后,可以写的很简洁了.但不是说lambda只能用来简化匿名内部类,从lambda的实际作用和表现上来看,就是一个变量指代一个代码块.而能够使用lambda表达式的一个前提要求是,该变量必须实现某个函数式接口.啥是函数式接口?参考jdk1.8新特性之函数式接口.看例子: 1.函数式接口 * Copyright (c) 1994, 2013, O

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

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

2020了你还不会Java8新特性?Lambda表达式及API(二)

lambda表达式 为什么要使用lambda表示式 在Java中无法将函数座位参数传递给一个方法,也无法返回一个函数的方法. 在js中,函数的参数是一个函数.返回值是另一个函数的情况是非常常见的.是一门经典的函数式语言. Java匿名内部类. 匿名内部类的介绍 Gradle的使用.可以完全使用maven的中央仓库. 进行安卓的开发时,gradle已经成为标配了. lambda: 匿名内部类 my_jButton.addActionListener(new ActionListener() { @

jdk1.8新特性之lambda表达式及在Android Studio中的使用举例

Jdk1.8已经出很久了但是很多同学对它的特性在android studio 中的应用可能还不是很熟悉,今天我们就来对这个新特性在AS中做它的应用实践. 一.首先在有JDK1.8的情况下我们要在AS的设置中将这个地方设置成java1.8的. 二在build.gradle中添加上这两句 即: compileOptions {    sourceCompatibility 1.8    targetCompatibility 1.8} 这样就完成了使用之前的设置工作了.然后我们进入重要的应用. 那么