c++ Lambda表达式 简单实验

devtools/2024/10/21 4:00:35/

C++11引入的Lambda表达式是一种非常强大的特性,它允许我们定义匿名函数对象。Lambda表达式常用于回调函数、STL算法中需要传递函数对象的场景等。下面是一个简单的C++ Lambda表达式的实验:

#include <iostream>  
#include <vector>  
#include <algorithm>  
  
int main() {  
    // 定义一个包含整数的vector  
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};  
  
    // 使用Lambda表达式,将每个元素乘以2  
    std::for_each(numbers.begin(), numbers.end(), [](int n) {  
        std::cout << n * 2 << " ";  
    });  
    std::cout << std::endl;  
  
    // 使用Lambda表达式查找vector中的最大元素  
    auto max_element = std::max_element(numbers.begin(), numbers.end(), [](int a, int b) {  
        return a < b;  
    });  
    std::cout << "Max element is: " << *max_element << std::endl;  
  
    // 使用Lambda表达式和一个捕获列表捕获外部变量  
    int sum = 0;  
    std::for_each(numbers.begin(), numbers.end(), [&sum](int n) {  
        sum += n;  
    });  
    std::cout << "Sum of elements is: " << sum << std::endl;  
  
    return 0;  
}
在这个实验中,我们做了以下几件事情:

定义了一个包含整数的std::vector。
使用std::for_each算法和Lambda表达式将vector中的每个元素乘以2并打印出来。Lambda表达式[](int n) { std::cout << n * 2 << " "; }没有捕获任何外部变量,它只接受一个整数参数n,并打印出n的两倍。
使用std::max_element算法和另一个Lambda表达式查找vector中的最大元素。Lambda表达式[](int a, int b) { return a < b; }定义了如何比较两个元素,这里是比较它们的大小。
再次使用std::for_each算法和一个捕获了外部变量sum的Lambda表达式来计算vector中所有元素的和。这里使用了引用捕获[&sum],意味着Lambda表达式内部可以直接修改外部变量sum的值。
Lambda表达式的语法如下:

[capture](parameters) -> return_type { body }
[capture]:捕获列表,用于捕获Lambda表达式外部的变量。可以是值捕获[var]、引用捕获[&var]或混合捕获[var1, &var2]。
(parameters):参数列表,与普通函数参数列表类似。
-> return_type:返回类型,如果Lambda表达式没有返回值,可以省略。
{ body }:Lambda体,即函数体,包含Lambda要执行的代码。
这个简单的实验展示了Lambda表达式的灵活性和强大功能,它允许我们编写简洁、易读的代码,并避免定义冗长的函数或函数对象。


http://www.ppmy.cn/devtools/32429.html

相关文章

模型训练常见超参数的讲解

一、latent_dim(潜在空间的维度) 在模型训练中,潜在空间(latent space)是指嵌入在模型内部的一种低维、通常连续的表示空间,尤其是在无监督学习或生成模型(如自编码器、变分自编码器VAEs、生成对抗网络GANs)中。潜在空间的维度(latent dimensionality)是指这个空间的…

微服务之SpringCloud AlibabaSeata处理分布式事务

一、概述 1.1背景 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用&#xff0c;就会产生分布式事务问题 but 关系型数据库提供的能力是基于单机事务的&#xff0c;一旦遇到分布式事务场景&#xff0c;就需要通过更多其他技术手段来解决问题。 全局事务&#xff1a;…

OC类与对象上半章节较为重要的部分

OC类与对象上半章节较为重要的部分 文章目录 OC类与对象上半章节较为重要的部分前言OC对象的本质OC的实例对象&#xff0c;类对象&#xff0c;元类对象isa和superclass分析分析isKindOfClass和isMemberOfClass方法->和点语法的区别 前言 分享会的时候对于isKindOfClass和isM…

根据前序遍历求树的各种遍历

//创建二叉树和三种遍历,输入序列如 1 5 8 0 0 0 6 0 0 #include <stdio.h> #include <iostream> using namespace std;struct Node{int data;Node* left;Node* right; };Node* create(void){int x;cin>>x;if(x0){return NULL;}Node *T new Node;T->dat…

Linux系统的source命令详解

目录 一、命令介绍 二、基本用法 三、使用场景 1、环境变量 2、函数和别名 3、配置文件 三、命令示例 1、一般的脚本文件 2、使用source的效果 四、使用 source 命令的重要性 1、修改当前 shell 会话的环境 2、加载配置文件 3、在当前 shell 会话中测试脚本 五、…

UDP 协议

UDP协议端格式 教科书上的&#xff1a; 16位UDP长度&#xff0c;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的最大长度&#xff0c;描述了这个数据报多长&#xff1b; 实际上的&#xff1a; UDP 会把载荷数据&#xff0c;就是通过 UDP Socket&#xff0c;即 sen…

个人对行为型设计模式的理解 @by_TWJ

目录 1. 访问者模式2. 迭代器模式3. 观察者模式4. 模板模式5. 状态模式6. 备忘录模式7. 策略模式8. 解释器模式9. 责任链模式10. 命令模式11. 中介者模式 研究了一下&#xff0c;我为了方便理解&#xff0c;对它们进行了分类&#xff1a; 针对请求者与执行者关系方面 1对多 - 责…

CocoaPods:iOS项目依赖管理的利器

CocoaPods&#xff1a;iOS项目依赖管理的利器 一、引言 在iOS项目的开发过程中&#xff0c;我们经常需要集成各种第三方库来快速实现某些功能&#xff0c;如网络请求、UI组件、数据处理等。然而&#xff0c;手动管理这些第三方库的版本、依赖和更新是一个繁琐且容易出错的过程…