C++14中lambda表达式新增加的features的使用

news2025/2/26 22:14:39

      lambda表达式是在C++11中引入的,它们可以嵌套在其它函数甚至函数调用语句中,C++11中lambda表达式的使用参考:https://blog.csdn.net/fengbingchun/article/details/52653313

      lambda表达式语法如下:除capture和body是必须的,其它均是可选的

[capture] (params) mutable exception attribute -> return-type { body }

      这里介绍下C++14中对lambda表达式新增加的features:

      1.generic lambda:lambda表达式与auto关键字组合,将auto用作参数类型,以下为测试代码:

namespace {

//void print_elements(auto& C) // windows need to c++20
template<typename T>
void print_elements(const T& C)
{
	for (const auto& e : C)
		std::cout << e << " ";
	std::cout << "\n";
}

}

int test_lambda_14_1()
{
	// reference: https://www.geeksforgeeks.org/generalized-lambda-expressions-c14/
	/* Under the hood, the C++ implementation uses the closure type’s operator() to overload a template function
	struct sum {
		template<typename T1, typename T2>
		auto operator()(T1 a, T2 b) const { return (a + b); }
	};
	*/
	auto sum = [](auto a, auto b) {
		return (a + b);
	};

	std::cout << "int sum:" << sum(10, 20) << "\n";
	std::cout << "float sum:" << sum(1.2f, 2.3f) << "\n";
	std::cout << "float sum:" << sum(10, 1.5f) << "\n";
	std::cout << "string sum:" << sum(std::string("csdn addr:"), std::string("https://blog.csdn.net/fengbingchun")) << "\n";


	auto greater = [](auto a, auto b) -> bool {
		return (a > b);
	};

	std::vector<int> vi = { 1, 4, 2, 6 };
	std::vector<float> vf = { 4.62f, 161.3f, 62.26f, 13.4f };
	std::vector<std::string> vs = { "Tom", "Harry", "Ram", "Shyam" };

	std::sort(vi.begin(), vi.end(), greater);
	std::sort(vf.begin(), vf.end(), greater);
	std::sort(vs.begin(), vs.end(), greater);

	print_elements(vi);
	print_elements(vf);
	print_elements(vs);


	std::vector<std::vector<int>> v = { {7, 8}, {1, 2}, {3, 7}, {4, 5} };
	std::sort(v.begin(), v.end(), [](std::vector<int>& a, std::vector<int>& b) {
		return (a[1] < b[1]);
	});

	for (int i = 0; i < v.size(); ++i) {
		for (int j = 0; j < v[0].size(); ++j) {
			std::cout << v[i][j] << " ";
		}
		std::cout << "\n";
	}

	return 0;
}

      执行结果如下图所示:

      2.capture initializers:允许创建使用任意表达式初始化captures初始化表达式在创建lambda时计算,而不是在调用时,以下为测试代码:

namespace { int factory(int i) { return i * 10; } }

int test_lambda_14_2()
{
	// reference: https://github.com/AnthonyCalandra/modern-cpp-features#lambda-capture-initializers
	auto f = [x = factory(2)] { return x; };
	std::cout << "f:" << f() << "\n";


	auto generator = [x = 0]() mutable {
		// this would not compile without 'mutable' as we are modifying x on each call
		return x++;
	};

	auto a = generator();
	auto b = generator();
	auto c = generator();
	std::cout << "a:" << a << ",b:" << b << ",c:" << c << "\n";


	auto p = std::make_unique<int>(1);
	//auto task1 = [=] { *p = 5; }; // ERROR: std::unique_ptr cannot be copied
	auto task2 = [p = std::move(p)] { *p = 5; return *p; }; // OK: p is move-constructed into the closure object
	// the original p is empty after task2 is created
	if (!p)
		std::cout << "p is empty" << "\n";
	std::cout << "task2:" << task2() << "\n";


	auto x = 2;
	auto f2 = [&r = x, x = x * 10] {
		++r;
		return r + x;
	};
	std::cout << "f2:" << f2() << ",x:" << x << "\n";

	return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索引的作用与结构(数据库)

目录 一、索引概述 1、什么叫索引 2、索引的作用 二、SQL Server索引下的数据组织结构 1&#xff0e;堆集结构 2&#xff0e;聚集索引结构 3&#xff0e;非聚集索引 4&#xff0e;扩展盘区空间的管理 一、索引概述 1、什么叫索引 数据库中的索引与书籍中的索引类似&…

【数据分享】2014-2023年全国各监测站点的逐时、逐日、逐月、逐年AQI数据

空气质量的好坏反映了空气的污染程度&#xff0c;在各项涉及城市环境的研究中&#xff0c;空气质量都是一个十分重要的指标。空气质量是依据空气中污染物浓度的高低来判断的。 我们发现学者王晓磊在自己的主页里面分享了2014年5月以来的全国范围的到站点&#xff08;全国有约2…

小实验:关于期望的乘法性质

小实验&#xff1a;关于期望的乘法性质 引言个人疑惑验证过程样本生成实验过程 附&#xff1a;完整代码 引言 本节通过代码实现期望的乘法性质。 个人疑惑 在数学期望的定义中&#xff0c;有一条随机变量期望的乘法性质&#xff1a; 当随机变量 X , Y \mathcal X,\mathcal Y…

spring如何处理循环依赖

何为循环依赖 所谓的循环依赖&#xff0c;就是两个或者两个以上的bean互相依赖对方&#xff0c;最终形成闭环。比如“A对象依赖B对象&#xff0c;而B对象也依赖A对象”&#xff0c;或者“A对象依赖B对象&#xff0c;B对象依赖C对象&#xff0c;C对象依赖A对象”&#xff1b;类…

MySQL笔记-多表查询

本文标签 : 多表查询 事务四大特性 并发事务问题 事务隔离级别 文章目录 目录 文章目录 一、多表查询 1.多表关系 2.多表查询概念 3.多表查询的分类 4.内连接 5.外连接 6.自连接 7.联合查询 8.子查询 1.标量子查询 2.列子查询 3.行子查询 4.表子查询 9.多表查询案例练习 二…

springboot+vue汉服文化平台网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的汉服文化平台网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

初阶数据结构之带头+双向+循环链表增删查实现(三)

文章目录 [TOC](文章目录) 前言一、带头双向循环链表的初始化1.1带头双向循环链表的结构体定义1.2初始化代码的实现 二、带头双向循环链表的增功能实现2.1头插代码的实现2.2尾插代码的实现 三、带头双向循环链表的打印功能实现3.1打印代码的实现 四、带头双向循环链表删功能实现…

国开电大《WEB开发基础》形考任务【答案】实验1-5:电商网站前端页面内容编写

国开电大《WEB开发基础》形考任务1 国开电大《WEB开发基础》形考任务1 国开电大《WEB开发基础》形考任务3 国开电大《WEB开发基础》形考任务4 国开电大《WEB开发基础》形考任务5 作业答案 联系QQ:1603277115 【目标】根据素材中的设计图&#xff0c;编写网站首页&#xff0c;查…

AcWing算法提高课-1.3.6货币系统

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 给你一个n种面值的货币系统&#xff0c;求组成面值为m的货币有多少种方案。 输入格式 第一行&#xff0c;包含两个整数n和m。 接…

Vue3-黑马(七)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-子组件1 &#xff08;2&#xff09;vue3-基础-子组件2 &#xff08;3&#xff09;vue3-进阶-antdv-入门 &#xff08;1&#xff09;vue3-基础-子组件1 之前我们的例子里只使用了一个vue的组件&#xff0c;那么在这个…

近40个开源的工业软件-工业4.0

不同的工业流程&#xff0c;需要不同的工业软件。面向研发设计环节的开源软件&#xff0c;今天就来介绍一下面向生产控制环节的开源软件&#xff0c;主要为可编程逻辑控制器&#xff08;PLC)、分布式控制系统&#xff08;DCS&#xff09;、生产执行系统&#xff08;MES&#xf…

人工智能(AI)的应用以及前景

当今世界正迎来人工智能技术的全面爆发&#xff0c;它在各个领域的应用已经展现出了巨大的潜力和优势。下面&#xff0c;我们来探讨一下人工智能在不同领域中的应用。 首先&#xff0c;人工智能在医疗领域中的应用已经逐渐成为了现实。医疗机构可以利用人工智能技术&#xff0…

Java学习(13)(异常的概念、异常的体系结构、异常的分类、异常的处理【防御式编程、异常的抛出、异常的捕获、异常的处理流程】、自定义异常类 )

接上次博客&#xff1a;Java学习&#xff08;12&#xff09;&#xff08;String类、String的查找方法、字符串转化、 替换、拆分、截取、trim方法、字符串的不可变性、StringBuilder和StringBuffer&#xff09;_di-Dora的博客-CSDN博客 目录 异常的概念 异常的体系结构 异常…

【Python基础知识点总结】

Python基础知识点总结 思维导图基础数据类型数据结构基础语法高级语法简单编程题工程项目类石头剪子布扑克发牌学生成绩管理系统 思维导图 基础数据类型 布尔(bool) True False字符(str) ‘hello Python’整型(int) -1,5,88浮点(float) -2.3,4.1 数据结构 字典 {“position”…

springboot+vue交流互动系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的交流互动系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

Springmvc练习二

1、网站练习&#xff0c;先清楚原理&#xff0c;便于拓展 注意一点就是页面定位的问题&#xff0c;如果你springmvc文件没有配置加上后缀“.jsp”的设置记得在网站控制器源代码的基础上加上“.jsp” 2、简单尝试一下就知道&#xff0c;这里所谓的参数绑定无非就是在java代码的…

【ChatGPT】ChatGPT国内镜像网站集合

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 什么是ChatGPT镜像&#xff1f; 亲测&#xff1a; 一、二狗问答(AI对话) 二、AiDuTu 三、WOChat 四、ChatGPT(个人感觉最好用) 我们可以利用ChatGPT干什么&#xff1f; 一、三分…

Java EE 初阶---多线程(二)

目录 四、多线程案例之--单例模式 4.1 单例模式 4.2 怎么去设计一个单例&#xff1f; 饿汉模式 懒汉模式 4.3 两种模式的总结 四、多线程案例之--单例模式 4.1 单例模式 是校招中最常考的设计模式之一. 啥是设计模式&#xff1f; 设计模式好比象棋中的 " 棋谱 "…

MaterialDesignInXamlToolkit 初学项目实战(1)首页搭建

前言 最近在学WPF&#xff0c;由于人比较烂&#xff0c;有一个星期没怎么动代码了。感觉有点堕落。现在开始记录WPF项目&#xff0c;使用MaterialDesignInXamlToolkit。 环境搭建 如果没下载MaterialDesign 的源码 github源码运行 在Nuget里面引入MaterialDesign Materia…

【ChatGPT镜像网站+MindShow高效生成PPT,保姆级安装教程】

&#x1f680; AI破局先行者 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&am…