lambda

2023-11-14

外部变量访问方式说明符

[] 不捕获任何变量
[&] 以引用方式捕获所有变量
[=] 用值的方式捕获所有变量(可能被编译器优化为const &)
[=, &foo] 以引用捕获foo, 但其余变量都靠值捕获
[&, foo] 以值捕获foo, 但其余变量都靠引用捕获
[bar] 以值方式捕获bar; 不捕获其它变量
[this] 捕获所在类的this指针

[] (int x, int y) { return x + y; } // 隐式返回类型 

[] (int& x) { ++x;  } // 没有 return 语句 -> Lambda 函数的返回类型是 'void' 

[] () { ++global_x;  } // 没有参数,仅访问某个全局变量

[] (int x, int y) -> int { int z = x + y; return z; } //指定返回类型

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#include<vector>
#include<set>
using namespace std;
/*外部变量访问方式说明符

[] 不捕获任何变量
[&] 以引用方式捕获所有变量
[=] 用值的方式捕获所有变量(可能被编译器优化为const &)
[=, &foo] 以引用捕获foo, 但其余变量都靠值捕获
[&, foo] 以值捕获foo, 但其余变量都靠引用捕获
[bar] 以值方式捕获bar; 不捕获其它变量
[this] 捕获所在类的this指针
* 
* 捕获的最后一个赋值的
* */
int main() {
    int n = 10000, m, x, y;
    auto a = [&](int a, int b) {return a + b + n;};
    n = 1000000;
    auto b = [&n](int a, int b){return a + b + n;};
    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << a(1, 2) << endl;
    cout << b(1, 2) << endl;
    return 0;
}

#include<iostream>
#include<functional>
using namespace std;

auto add = [](int a, int b) -> long long {  //auto自动推导  , ->long long指定返回类型
    return a + b;
};

auto Data = [](int a, int b) {  //auto推导Data是lambda表达式类的对象
    return [=](auto func) { //func参数可以是lambda表达式。
        return func(a, b);
    };
};

auto First = [](int a, int b) {
    return a;
};

auto Second = [](int a, int b) {
    return b;
};

auto Add = [](int a, int b) {
    return a + b;
};

auto Max = [](int a, int b) {
    return max(a, b);
};

auto is_in = [](int a, int b) {
    return [=](int x) {
        return a <= x && x <= b;
    };
};

auto OR = [](auto u, auto v) {
    return [=](int x) {
        return u(x) || v(x);
    };
};

auto NOT = [](auto u) {
    return [=](int x) {
        return !u(x);
    };
};

auto is_little = is_in('a', 'z');
auto is_upper = is_in('A', 'Z');
auto is_digit = is_in('0', '9');
auto is_alpha = OR(is_little, is_upper);
auto other = NOT(is_alpha);

function<int()> Temp_Func() {
    int a = 23;
    return [=]() -> int {
        return a;
    };
}

int main() {
    cout << is_little('A') << endl;
    cout << is_little('a') << endl;
    cout << is_alpha('a') << endl;
    cout << is_alpha('A') << endl;
    cout << other('A') << endl;
    cout << other('9') << endl;
    cout << add(2, 4) << endl;
    auto func = Temp_Func();
    cout << func() << endl;
    auto a = Data(rand() % 1000, rand() % 1000); //a是对象
    cout << a(First) << endl;
    cout << a(Second) << endl;
    cout << a(Add) << endl;
    cout << a(Max) << endl;
    return 0;
}

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

lambda 的相关文章

  • 如何知道并加载特定文件夹中的所有图像?

    我有一个应用程序 C Builder 6 0 需要知道特定文件夹中的图像总数 然后我必须加载它们 在 ImageList 或 ComboBoxEx 中 或任何其他控件中 我怎样才能做到这一点 我知道如何在控件中加载图像 或保存在 TList
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

  • vagrant 虚拟机扩容磁盘

    vagrant 虚拟机扩容磁盘 修改配置 安装插件 存储扩容 修改配置 参考博客 https blog csdn net marina 1 article details 122238721 vagrant 版本 PS D vagrant
  • TCP客户端非阻塞connect,EPOLL异步响应

    废话不多说 直接上代码 下面展示一些 内联代码片 include
  • 配置固定IP地址

    问题 为本机配置固定的网络地址 IP地址 192 168 8 128 子网掩码 255 255 255 0 关闭NetworkManager服务 禁止开机自启 重启network服务 查看配置 方案 默认的网卡配置文件路径 etc sysc
  • 【MySQL锁篇】一、MySQL当中有哪些锁

    本文为博主对于 小林coding 网站的学习笔记 详情请参考原网站 目录 全局锁 全局锁的使用 全局锁的应用场景 全局锁的缺点 比较高效的备份方式 表级锁 表锁 元数据锁 MDL MDL锁的设计初衷 MDL锁的工作场景 MDL锁 是在什么时
  • 华为OD机试 - 勾股数元组(Java)

    题目描述 如果3个正整数 a b c 满足a 2 b 2 c 2的关系 则称 a b c 为勾股数 著名的勾三股四弦五 为了探索勾股数的规律 我们定义如果勾股数 a b c 之间两两互质 即a与b a与c b与c之间均互质 没有公约数 则其
  • 【程序开发经验分享2024】计算机毕业设计吊打导师Python+Spark知识图谱课程推荐系统 课程预测系统 mooc慕课课程爬虫 课程大数据 课程数据分析大屏 大数据毕业设计 大数据毕设

    开发技术 前端 vue js 后端 springboot mybatis plus 数据库 mysql neo4j 算法 机器学习 深度学习 协同过滤算法 基于用户 基于物品全部实现 神经网络混合CF推荐算法 MLP深度学习算法 SVD深度
  • 【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java

    榜单设立目的 GitHub中文排行榜 帮助你发现高分优秀中文项目 各位开发者伙伴可以更高效地吸收国人的优秀经验 成果 中文项目只能满足阶段性的需求 想要有进一步提升 还请多花时间学习高分神级英文项目 榜单设立范围 设立1个总榜 所有语言项目
  • jenkins学习笔记第十篇下载Allure插件生成完美报告

    创建MAVEN项目 指定Maven仓库 指定分支 指定check out路径 构建执行 生成HTMLReport 生成报告 这里附加上自定义实现的监听类 public class ZTestReport implements IReport
  • Hadoop2.6(新版本)----MapReduce工作原理

    最近在研究Hadoop 发现网上的一些关于Hadoop的资料都是以前的1 X版本的 包括MapReduce的工作原理 都是以前的一些过时了的东西 所以自己重新整理了一些新2 X版本的MapReduce的工作原理 下面我画了一张图 便于理解M
  • Buncket Sort桶排序(c++)实现代码

    代码原理我就不说了 参考 算法导论 原书第三版 p112 直接上代码会不会很爽 ConsoleApplication1 cpp 定义控制台应用程序的入口点 This programme is designed to show the Bun
  • 并查集学习

    并查集 看的很好的博文 链接如下 https blog csdn net chen134225 article details 82052537 两个函数 1 查找 int pre 1000 int find int x 查找x的顶级 in
  • 上传视频至云端并在本地显示---记微信小程序云开发过程

    作者 大家好 我是alicomon 寄语读者 此篇博客为学习或开发记录 目的有二 1 记录知识点 方便温故知新 2 为自己和读者提供帮助 用于交流 共同提高 上传视频至云端并在本地显示 1 index wxml 2 index js 3 效
  • 配置Kettle连接大数据HDFS

    需求 配置Kettle连接大数据HDFS Kettle对接大数据平台的配置 一 软件环境 1 Hadoop集群 版本 Hadoop3 3 0 2 ETL工具Kettle 版本 pdi ce 7 0 0 0 25 解压命令 zip 用 unz
  • 【数据压缩】Exp05.JPEG解码

    实验原理 01 JPEG的编解码原理 输入图像的YUV数据先进行偏置 再将图片按8x8的块进行DCT变换编程8x8的系数块 接着再根据8x8的量化表对系数块进行量化 量化后的8x8的系数块需要对其进行不同的操作 其中左上角的直流系数进行 交
  • Python中将字典转换为字符串常用的方法!

    在Python中 字典是一种很常见的数据类型 其由一组键值对组成的无序集合 有时候需要将字典转换为字符串 以便于在网络传输 文件存储等场合使用 那么如何将字典转换为字符串格式呢 以下是详细的内容 1 使用json库 json是一种轻量级的数
  • thread创建线程的一些坑

    测试detach的坑 class A public int m i A int a m i a cout lt lt Construction lt lt endl A const A a m i a m i cout lt lt Copy
  • Nacos、Eureka和Zookeeper有什么区别

    Nacos Eureka和Zookeeper都是服务注册中心 它们的主要功能是管理分布式系统中各个微服务实例的注册与发现 它们之间的主要区别在于 1 语言支持 Nacos是用Java语言开发的 Eureka是用Java语言开发的 Zooke
  • Opencv4基于C++的 实时人脸监测

    文章目录 一 环境配置搭建 VS2015 Opencv4 6 二 下资源文件 第一种 本地生成 第二种 直接下载 三 代码展示 窗口布局 main cpp test h test cpp 效果图 opencv人脸识别效果图 请叫我真爱粉 一
  • 二进制部署高可用k8s集群

    一 前置知识点 1 1 环境准备 服务器要求 建议最小硬件配置 2核CPU 2G内存 30G硬盘 软件环境 软件 版本 操作系统 CentOS7 x x64 容器引擎 Docker CE 19 Kubernetes Kubernetes v
  • lambda

    外部变量访问方式说明符 不捕获任何变量 以引用方式捕获所有变量 用值的方式捕获所有变量 可能被编译器优化为const foo 以引用捕获foo 但其余变量都靠值捕获 foo 以值捕获foo 但其余变量都靠引用捕获 bar 以值方式捕获bar