lambda

简介: lambda

1.介绍

lambda 函数是 C++11 引入的一种新特性,它允许你定义一个匿名的函数对象,可以用来作为参数传递给其他函数或算法。lambda 函数的语法非常简洁,可以让你在不定义完整函数的情况下快速实现简单的功能。

lambda 函数的语法如下:

[capture list] (parameters) -> return type { function body }

其中,capture list 是捕获列表,用于指定 lambda 函数可以访问哪些外部变量;parameters 是参数列表,与普通函数的参数列表相同;return type 是返回类型,可以省略,编译器会自动推断;function body 是函数体,包含 lambda 函数的实现。

2.例子

下面是一个简单的示例,演示如何使用 lambda 函数:

#include <iostream>
#include <vector>
#include <algorithm>
int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    int sum = 0;
    std::for_each(v.begin(), v.end(), [&sum](int x) {
        sum += x;
    });
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

在这个示例中,我们定义了一个 std::vector 对象 v,并使用 std::for_each() 算法遍历它。std::for_each() 算法接受一个函数对象作为参数,并对容器中的每个元素调用这个函数对象。

我们使用 lambda 函数作为 std::for_each() 算法的第三个参数。这个 lambda 函数接受一个整数参数 x,并将其累加到外部变量 sum 中。由于我们需要在 lambda 函数中修改外部变量 sum 的值,所以我们在捕获列表中使用了引用捕获 [&sum]。

这段代码的输出结果是:

Sum: 15

注意捕获列表是可选的,如果不需要访问外部变量,那么可以省略捕获列表。例如:

std::thread t([](){
    std::cout << "Hello from thread" << std::endl;
});

在这个示例中,我们创建了一个线程 t,它执行一个没有捕获列表的 lambda 函数。这个 lambda 函数输出一行文本,然后结束。

相关文章
|
7月前
|
缓存 安全 Java
Java 类加载机制硬核全解:双亲委派模型底层原理与破坏场景的实战
本文深入解析Java类加载机制,从JVM规范底层到生产级架构实战。首先详解类加载的7个生命周期阶段和6种主动使用触发规则,通过实例验证主动/被动使用的区别。重点剖析双亲委派模型的核心原理、JDK17类加载器层次结构及源码实现,并给出遵循规范的自定义类加载器实现。特别分析5大经典破坏场景:SPI机制通过线程上下文类加载器逆向加载、Web容器热部署的自定义加载逻辑、JDK9+模块化体系重构、插件化架构的动态加载等。
505 3
|
10月前
|
运维 监控 应用服务中间件
Nginx虚拟主机报警设置(手把手教你为网站配置实时监控与告警)
本文介绍如何为Nginx虚拟主机配置服务器报警,保障网站稳定运行。涵盖Shell脚本+定时任务的基础监控方案。来源:https://www.vps5.cn/
|
SQL 数据采集 存储
Hive 判断某个字段长度
【8月更文挑战第13天】
898 2
|
域名解析 监控 网络协议
【域名解析DNS专栏】DNS域名劫持与防范策略:保护你的域名安全
【5月更文挑战第26天】DNS域名劫持是网络攻击手法,攻击者篡改DNS记录,将用户导向恶意网站,威胁隐私泄露、数据窃取及品牌信誉。防范策略包括使用DNSSEC加密验证响应,选择安全的DNS服务提供商,定期检查DNS记录,以及教育员工和用户识别网络威胁。通过这些措施,可以增强域名安全,抵御DNS劫持攻击。
2137 0
|
存储 监控 安全
VLAN 寻址协议 (VTP)
【8月更文挑战第27天】
450 0
|
数据中心
使用的 LAN 电缆类型有哪些?
【8月更文挑战第4天】
1161 10
使用的 LAN 电缆类型有哪些?
|
弹性计算
阿里云ECS服务器出网带宽和入网带宽详解及选择
阿里云ECS服务器的带宽是我们自己花钱买的,也叫出网带宽,就是从服务器流出去的带宽。有出就有入,入网带宽说的是从外部流入到服务器的带宽。对于新手不太了解一出一入的关系,以及具体使用情况。本文科普ECS云服务器出网带宽和入网带宽的详细情况。
6024 0
阿里云ECS服务器出网带宽和入网带宽详解及选择
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
1811 3

热门文章

最新文章