C++ 入门第23天:Lambda 表达式与标准库算法入门

往期回顾:

C++ 入门第 20 天:STL 容器之无序集合与无序多重集合-CSDN博客

C++ 入门第 21 天:STL 容器之无序映射与无序多重映射-CSDN博客

C++ 学习第22天:智能指针与异常处理-CSDN博客


 C++ 入门第23天:Lambda 表达式与标准库算法入门

前言

今天我们学习两个重要的 C++ 特性:Lambda 表达式标准库中的算法。这两个特性是现代 C++ 编程的重要组成部分,能让我们的代码更简洁、高效。


1. Lambda 表达式

1.1 什么是 Lambda 表达式?

Lambda 表达式是 C++11 引入的一种匿名函数,用于简化代码。它允许我们直接在需要的地方定义函数,而不需要单独声明或定义。

1.2 Lambda 表达式的语法

Lambda 表达式的基本语法如下:

[capture](parameters) -> return_type {// 函数体
};

其中: 

  • [capture]:捕获列表,定义 Lambda 可以使用的外部变量。
  • (parameters):参数列表,类似普通函数的参数。
  • -> return_type:返回类型,可选。如果可以推导返回类型,可以省略。
  • {}:函数体,包含要执行的代码。

1.3 Lambda 表达式示例

#include <iostream>
using namespace std;int main() {// 简单的 Lambda 表达式auto add = [](int a, int b) -> int {return a + b;};cout << "3 + 5 = " << add(3, 5) << endl;// 无参数的 Lambda 表达式auto greet = []() {cout << "Hello, Lambda!" << endl;};greet();return 0;
}

输出结果

3 + 5 = 8 
Hello, Lambda! 

1.4 捕获列表的用法

Lambda 表达式可以通过捕获列表访问外部变量:

#include <iostream>
using namespace std;int main() {int x = 10;int y = 20;// 捕获 x 和 yauto sum = [x, y]() {return x + y;};cout << "x + y = " << sum() << endl;// 捕获所有变量的引用auto increment = [&]() {x++;y++;};increment();cout << "After increment, x = " << x << ", y = " << y << endl;return 0;
}

输出结果

x + y = 30 After increment, x = 11, y = 21


2. 标准库算法

2.1 什么是标准库算法?

C++ 的标准库算法头文件 <algorithm> 提供了一组常用的算法函数,用于处理容器中的数据,例如排序、查找、遍历等。

2.2 常用算法函数

以下是一些常用的标准库算法:

  1. std::sort:排序。
  2. std::find:查找元素。
  3. std::for_each:对容器中的每个元素执行操作。
  4. std::count:统计特定值的出现次数。
  5. std::accumulate:计算容器中所有元素的累计和(需要 <numeric> 头文件)。

2.3 示例代码

2.3.1 使用 std::sort
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> numbers = {5, 2, 9, 1, 5, 6};// 对容器排序sort(numbers.begin(), numbers.end());cout << "Sorted numbers: ";for (int n : numbers) {cout << n << " ";}cout << endl;return 0;
}

输出结果

Sorted numbers: 1 2 5 5 6 9 
2.3.2 使用 std::find
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> numbers = {5, 2, 9, 1, 5, 6};// 查找元素 9auto it = find(numbers.begin(), numbers.end(), 9);if (it != numbers.end()) {cout << "Found 9 at index: " << distance(numbers.begin(), it) << endl;} else {cout << "9 not found" << endl;}return 0;
}

输出结果

Found 9 at index: 2 
2.3.3 使用 std::for_each
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> numbers = {1, 2, 3, 4, 5};// 遍历容器并打印每个元素for_each(numbers.begin(), numbers.end(), [](int n) {cout << n * n << " ";  // 打印平方});cout << endl;return 0;
}

输出结果

1 4 9 16 25

2.3.4 使用 std::count
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> numbers = {1, 2, 3, 1, 1, 4, 1};// 统计元素 1 的出现次数int count_of_ones = count(numbers.begin(), numbers.end(), 1);cout << "Count of 1: " << count_of_ones << endl;return 0;
}

输出结果

Count of 1: 4 
2.3.5 使用 std::accumulate
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;int main() {vector<int> numbers = {1, 2, 3, 4, 5};// 计算累计和int total = accumulate(numbers.begin(), numbers.end(), 0);cout << "Total sum: " << total << endl;return 0;
}

输出结果

Total sum: 15 

结语

以上就是 C++ 中的 Lambda 表达式标准库算法的基础知识点了。Lambda 表达式 是一种简化代码的方法,特别适合在算法函数中使用。标准库算法 提供了多种容器操作工具,可以大幅减少代码量,提高开发效率。理解它们的特性和使用方法,可以显著提升我们的代码效率。编写更加简洁、优雅的 C++ 程序。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[笔记] Jenkins 安装与配置全攻略:Ubuntu 从零开始搭建持续集成环境

随着 DevOps 流程的普及&#xff0c;持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;已成为现代软件开发中不可或缺的一部分。Jenkins 作为一款开源的自动化服务器&#xff0c;广泛应用于 CI/CD 管道的构建与管理。它不仅支持多种编程语言和工具链&am…

精选2款.NET开源的博客系统

前言 博客系统是一个便于用户创建、管理和分享博客内容的在线平台&#xff0c;今天大姚给大家分享2款.NET开源的博客系统。 StarBlog StarBlog是一个支持Markdown导入的开源博客系统&#xff0c;后端基于最新的.Net6和Asp.Net Core框架&#xff0c;遵循RESTFul接口规范&…

Keepalived 进阶秘籍:全方位配置优化

文章目录 1.sysctl.conf参数优化2. limits参数优化3. global_defs模块区域4.vrrp_script模块区域5.vrrp_instance VI_1实例定义配置模块区域6. virtual_server模块区域7.Keepalived与Heartbeat、Corosync比较 前言&#xff1a; 作为一台Keepalived服务器&#xff0c;有必要对内…

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容&#xff0c;这部分内容一定要认真掌握&#xff0c;这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#…

rabbitmq——岁月云实战笔记

1 rabbitmq设计 生产者并不是直接将消息投递到queue,而是发送给exchange,由exchange根据type的规则来选定投递的queue,这样消息设计在生产者和消费者就实现解耦。 rabbitmq会给没有type预定义一些exchage,而实际我们却应该使用自己定义的。 1.1 用户注册设计 用户在…

基于Python的投资组合收益率与波动率的数据分析

基于Python的投资组合收益率与波动率的数据分析 摘要&#xff1a;該文通过研究马科维茨的投资组合模型&#xff0c;并将投资组合模型应用到包含6只金融股票的金融行业基金中。首先通过开源的财经接口Tushare获取股票原始数据&#xff0c;接着利用数据分析的黄金组合库&#xf…

Linux部署web项目【保姆级别详解,Ubuntu,mysql8.0,tomcat9,jdk8 附有图文】

文章目录 部署项目一.安装jdk1.1 官网下载jdk81.2 上传到Linux1.3 解压1.4 配置环境变量1.5 查看是jdk是否安装成功 二.安装TomCat2.1 官网下载2.2 上传到Linux2.3 解压2.4配置2.5 启动Tomcat2.6 验证是否成功 三.安装mysql四.部署javaweb项目4.1 打包4.2 启动tomcat 部署项目 …

前端基础--网络

http1到http2有哪些新增和区别 HTTP/1.0版本主要增加了 1&#xff0c;增加了HEAD,POST等方法 2&#xff0c;增加了状态码 3&#xff0c;增加了请求头和响应头 4&#xff0c;引入content-type&#xff0c;传输不在仅限于文本 5&#xff0c;在请求中加入了HTTP版本号 HTTP…

Maven 详细配置:Maven 项目 POM 文件解读

Maven 是 Java 开发领域中广泛使用的项目管理和构建工具&#xff0c;通过其核心配置文件——POM&#xff08;Project Object Model&#xff09;文件&#xff0c;开发者能够定义项目的基本信息、依赖关系、插件配置以及构建生命周期等关键要素。POM 文件不仅是 Maven 项目的核心…

加速物联网HMI革命,基于TouchGFX的高效GUI显示方案

TouchGFX 是一款针对 STM32 微控制器优化的先进免费图形软件框架。 TouchGFX 利用 STM32 图形功能和架构&#xff0c;通过创建令人惊叹的类似智能手机的图形用户界面&#xff0c;加速了物联网 HMI 革命。 TouchGFX 框架包括 TouchGFX Designer (TouchGFXDesigner)&#xff08;…

服务器漏洞修复解决方案

漏洞1、远程桌面授权服务启用检测【原理扫描】 Windows Remote Desktop Licensing Service is running: Get Server version: 0x60000604 1、解决方案&#xff1a;建议禁用相关服务避免目标被利用 方法一&#xff1a;使用服务管理器 打开“运行”对话框&#xff08;WinR&am…

Centos源码安装MariaDB 基于GTID主从部署(一遍过)

MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…

基于SpringBoot实现的保障性住房管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

Vue进阶(贰幺叁)node 版本切换

文章目录 一、前言1.1 什么是nvm? 二、查看已安装好的 node 版本三、下载 node 版本四、切换 node 版本五、查看在用 node 版本六、拓展阅读 一、前言 项目开发阶段&#xff0c;会涉及多node版本切换应用场景&#xff0c;可应用nvm实现node版本切换。 1.1 什么是nvm? nvm是…

Java-数据结构-链表-高频面试题(1)

在上一篇文章中&#xff0c;我们学习了链表中的"单向链表"&#xff0c;但学可不代表就是学会了&#xff0c;能够运用链表的地方比比皆是&#xff0c;解题方法也是层出不穷&#xff0c;今天就让我们巩固一下"单向链表"的知识吧~ 第一题&#xff1a;相交链表…

低空管控技术-无人机云监视技术详解!

一、无人机监听技术的原理 无人机监听技术主要依赖于射频&#xff08;RF&#xff09;探测、光学和红外传感器等技术手段。这些技术通过被动监听和监测无人机与飞行员&#xff08;或控制器&#xff09;之间的通信链路传输&#xff0c;以确定无人机的位置&#xff0c;甚至在某些…

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…

【形式篇】年终总结怎么写:PPT如何将内容更好地表现出来

——细节满满&#xff0c;看完立马写出一篇合格的PPT 总述 形式服务于内容&#xff0c;同时合理的形式可以更好地表达和彰显内容 年终总结作为汇报型PPT&#xff0c;内容一定是第一位的&#xff0c;在内容篇(可点击查看)已经很详细地给出了提纲思路&#xff0c;那如何落实到…

分享3个国内使用正版GPT的网站【亲测有效!2025最新】

1. molica 传送入口&#xff1a;https://ai-to.cn/url/?umolica 2. 多帮AI 传送入口&#xff1a;https://aigc.openaicloud.cn?inVitecodeMYAAGGKXVK 3. 厉害猫 传送入口&#xff1a;https://ai-to.cn/url/?ulihaimao

使用免费内网穿透(p2p)网络环境搭建小型文件管理服务器(简单操作)

目录 前言 “节点小宝” 使用环境&#xff1a; 应用场景&#xff1a; 准备工作 安装 …