C++ lambda

2023-10-30

lambda函数的完整形式:[captures](params) -> return_type { body }

[变量捕获方式][参数列表]->返回值类型{代码块}

lambda函数单独使用的时候必须赋值给auto类型的变量

举个例子:

#include<iostream>
int main(){
    //lambda函数单独使用的时候必须赋值给auto类型的变量
    auto add=[](int x,int y)->int{return x+y;};
    std::cout<<add(10,5);
}

如果没有返回值,那么“->reture_type”部分可省略不写

举个例子

#include<iostream>
int main(){
	auto show=[](int x){std::cout<<x<<" ";};
	for(int i=0;i<10;i++){
		show(i);
	}
}

captures里面可以放"="或"&",也可以不写

"="是以值传递的方式捕获变量放到参数列表中

“&”是以引用的方式捕获变量放到参数列表中

#include<iostream>
#include <algorithm>
int main(){
	int nums[10]={1,2,3,4,5,6,7,8,9,10};
	
	//以值传递的方式捕获nums[0]、nums[1]...nums[9]到参数x中
	std::for_each(nums,nums+10,[=](int x){std::cout<<x<<" ";});
	
	std::cout<<std::endl;
	
	//以引用的方式捕获nums[0]、nums[1]...nums[9]到参数x中
	std::for_each(nums,nums+10,[&](int &x){x++;});
	for(int i=0;i<10;i++){
		std::cout<<nums[i]<<" ";
	}
}

 

capture里面可以放外部变量

#include<iostream>

int main(){
	int count=0;
	char*str="Hello Lambda!";
	auto str_count=[&count](char*str){
		for(int i=0;str[i]!='\0';i++)
			count++;
	};
	str_count(str);
	std::cout<<count;
}

 

capture里面可以混合使用

int main(){
	
	int total=0,count=0;
	int nums[10]={1,1,1,1,1,1,1,1,1,1};
	int size=10;
	//[=,&count,&total]表示除了count和total是引用,
	//其他参数都是值传递。
	auto sum=[=,&count,&total](int nums[],int size){
		for(int i=0;i<size;i++){
			total+=nums[i];
			count++;
		}
	};
	sum(nums,size);
	std::cout<<"数组之和为:"<<total<<std::endl;
	std::cout<<"数组元素个数为:"<<count<<std::endl;
	std::cout<<"size:"<<size<<std::endl;
	std::cout<<"nums数组:"<<std::endl;
	for(int i=0;i<size;i++){
		std::cout<<nums[i]<<" ";
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ lambda 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 私有模板函数

    我有一堂课 C h class C private template
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐