《Eigen入门》第 15 章 · 现代 C++ 特性
C 从 2011 年开始进入现代 C时代C11、14、17…新增了许多让代码更简洁、更安全、更高效的特性。本章讲几个最常用的auto、范围 for、lambda、nullptr 等。15.1 auto自动推导类型写类型名很繁琐时让编译器帮你推导intx42;// 手动写类型autoy42;// auto 自动推导为 intstd::vectorintv{1,2,3};std::vectorint::iterator itv.begin();// 好长的类型autoit2v.begin();// auto 简洁得多auto让编译器根据右边的值自动推断类型特别适合类型名很长的场景如 Eigen 的某些类型。遍历容器时配合 autofor(autoitv.begin();it!v.end();it){...}// 迭代器遍历for(autox:v){...}// 范围 for15.2 范围 forrange-for第 12 章提过这里再强调因为它太常用std::vectorintv{1,2,3,4,5};for(intx:v){std::coutx ;}// 只读for(intx:v){x*2;}// 引用可修改for(constautox:v){std::coutx ;}// 常量引用只读高效for (元素 : 容器)自动遍历容器每个元素不用写下标、不用关心边界。15.3 lambda 表达式匿名函数lambda 是没有名字的函数可以定义在使用它的地方#includeiostreamintsquare(intx){returnx*x;}// 普通函数autosquareLambda[](intx){returnx*x;};// 等价的 lambdaintmain(){std::coutsquare(5) squareLambda(5)std::endl;// 25 25return0;}注意这里 lambda 换了个名字。如果你写成auto square …会和上面那个函数重名编译器报auto square redeclared as different kind of entity——同一个作用域里函数和变量不能共用一个名字。语法[捕获](参数) { 函数体 }[]捕获列表访问外部变量()参数{}函数体lambda 最常用于配合标准库算法#includealgorithm#includevector#includeiostreamintmain(){std::vectorintv{5,2,8,1,9};// 用 lambda 做排序规则降序std::sort(v.begin(),v.end(),[](inta,intb){returnab;});for(intx:v)std::coutx ;// 9 8 5 2 1}std::sort是标准库排序算法第三个参数是比较规则lambda 直接内联写出来非常方便。捕获外部变量intthreshold5;autoisBig[threshold](intx){returnxthreshold;};// 捕获 threshold 的值[threshold]表示按值捕获外部变量thresholdlambda 内就能用它。15.4 nullptr明确的空指针以前用NULL其实是 0现在用nullptr类型更明确int*pnullptr;// 明确的空指针if(pnullptr){...}15.5 统一初始化{}花括号初始化更安全禁止窄化转换inta{5};// 花括号初始化std::vectorintv{1,2,3};Point p{1.0,2.0};// 类也能用15.6 常用现代写法总结// 老写法先建空容器再逐个追加std::vectorintoldWay;oldWay.push_back(1);// 现代写法一行建好并给初值std::vectorintv{1,2,3};// 老写法下标遍历for(std::size_t i0;iv.size();i){std::coutv[i] ;}// 现代写法范围 forfor(autox:v){std::coutx ;}循环变量的类型v.size()返回的不是int而是无符号的std::size_t。写成for (int i 0; i v.size(); i)加-Wall编译会出警告comparison of integer expressions of different signedness更麻烦的是将来出现v.size() - 1这类式子时空容器的结果会变成一个巨大的正数。要么老老实实写std::size_t要么直接用范围 for推荐。15.7 一个贯穿全部特性的示例#includeiostream#includevector#includealgorithmintmain(){// auto 初始化列表autoscoresstd::vectorint{85,92,78,60,95,88};// 范围 for 遍历std::cout原始分数;for(autos:scores)std::couts ;std::coutstd::endl;// lambda 算法统计及格人数intpassstd::count_if(scores.begin(),scores.end(),[](ints){returns60;});std::cout及格人数passstd::endl;// lambda求平均分doublesum0;for(autos:scores)sums;std::cout平均分sum/scores.size()std::endl;return0;}实际输出原始分数85 92 78 60 95 88 及格人数6 平均分83六个分数都 ≥ 60所以及格人数是 6平均分 498 / 6 83。这二十几行里同时出现了auto、范围 for、lambda、标准库算法——现代 C 的日常写法就是这么组合的。15.8 小结auto自动推导类型适合长类型名。范围 for简洁遍历容器。lambda匿名函数[](参数){函数体}配合算法好用。nullptr明确的空指针。{}统一初始化。 第一部分完成恭喜你学完了 C 的基础你现在已经掌握了变量、类型、运算符、控制流、函数数组、字符串、指针、引用、类动态内存、智能指针、STL 容器重载、模板、现代 C 特性这些是写任何 C 程序的基础。第二部分我们补上理解 Eigen 所需的线性代数然后进入 Eigen 的正题。练习题用auto声明一个std::vectorint用范围 for 遍历打印。用 lambda 配合std::sort给一个 vector 降序排序。用 lambda 判断一个数是否为偶数配合std::count_if统计偶数个数。用{}初始化一个字符串和一个 vector。用自己的话总结auto、范围 for、lambda 分别解决什么问题。

相关新闻

从零自研图表设计器:数据模型、Canvas渲染与性能优化实践

从零自研图表设计器:数据模型、Canvas渲染与性能优化实践

最近在重构一个内部用的图表设计模块,项目代号就叫 diagram-design。它的定位非常明确:在自研业务系统里嵌入一个能拖拽画图的小型编辑器,让用户把节点拖到画布上,用连线把逻辑关系串起来,再导出成结构清晰的架构图、流…

2026/10/18 5:18:39 阅读更多 →
工程咨询 GEO 实战:让 AI 在项目前期调研中采信你的方案观点

工程咨询 GEO 实战:让 AI 在项目前期调研中采信你的方案观点

工程咨询 GEO 的核心挑战在于场景复杂、术语密集、案例涉密。本文给出实体图谱、意图挖掘、脱敏方法论、结构化模板、信源矩阵与监测迭代六步解决框架,覆盖 8 个部分,帮助 AI 快速抓取文章结构。1. 工程咨询 GEO 的难点:为什么传统 SEO 思路在…

2026/10/18 5:18:39 阅读更多 →
短视频怎么做 GEO:优化字幕和文稿,提升 AI 文本抓取采信率

短视频怎么做 GEO:优化字幕和文稿,提升 AI 文本抓取采信率

1. 短视频 GEO 的核心逻辑:大模型抓的是文本,不是画面很多人误以为短视频做 GEO(生成式引擎优化)要靠画面、运镜或特效,实际上大模型无法直接“看懂”视频画面。AI 在回答用户问题时,抓取的是视频的字幕、简…

2026/10/18 5:18:39 阅读更多 →

最新新闻

深度强化学习DEQN微电网能量调度实战:从环境建模到成本优化

深度强化学习DEQN微电网能量调度实战:从环境建模到成本优化

做过微电网能量管理的人,应该都体会过这种尴尬:光伏出力一会儿猛涨一会儿暴跌,电价一天好几个峰谷,储能电池的SOC稍微没控好就到限,还要在“多买电”和“少卖电”之间反复权衡。传统规则策略写了几十条if-else&#xf…

2026/10/18 22:10:29 阅读更多 →
b3dm转FBX实操:Blender 4.3中倾斜摄影模型单体化全流程

b3dm转FBX实操:Blender 4.3中倾斜摄影模型单体化全流程

前阵子有朋友丢给我一整套三维瓦片,说是某个街区的高精度倾斜摄影成果,文件后缀清一色是.b3dm。他在三维GIS平台里看得很爽,可美术那边要的是 FBX,还要求在 Blender 4.3 里把每栋楼单独拎出来——也就是常说的单体化。这条链路听起…

2026/10/18 22:10:29 阅读更多 →
Rufus、AMC与DSP组合打法:AI时代亚马逊卖家精细化运营实战指南

Rufus、AMC与DSP组合打法:AI时代亚马逊卖家精细化运营实战指南

我做了几年亚马逊,明显感觉到平台这两年的变化节奏比过去十年都快。Rufus上线后,买家的购物路径被彻底改写;AMC和DSP把广告投放从“关键词采买”拉高到了“人群资产经营”的层级;Gemini3这一类AI工具又把文案和数据分析的效率往上…

2026/10/18 22:10:29 阅读更多 →
Flink SQL 写入 ClickHouse 实战:从建表到参数调优与踩坑记录

Flink SQL 写入 ClickHouse 实战:从建表到参数调优与踩坑记录

做实时数据开发这几年,有个绕不开的组合越来越常见:Flink SQL 负责实时计算,ClickHouse 负责快速分析查询。用 Flink SQL 把数据写进 ClickHouse,几乎成了实时数仓、实时报表和指标大屏场景里的标配链路。很多人第一次接触时容易想…

2026/10/18 22:10:29 阅读更多 →
分布式参数系统控制器设计:从偏微分方程到鲁棒控制实战

分布式参数系统控制器设计:从偏微分方程到鲁棒控制实战

简介:这份资源是克尔斯滕A莫里斯所著《分布式参数系统的控制器设计》的PDF电子书,面向控制理论、系统设计与数学模型方向的研究人员、工程师及高校师生,帮助读者系统掌握分布式参数系统(DPS)的控制与估计基础。内容涵盖…

2026/10/18 22:10:29 阅读更多 →
SSM智慧医院门诊管理系统源码解析:从环境搭建到二次开发

SSM智慧医院门诊管理系统源码解析:从环境搭建到二次开发

简介:这是一套基于SSM框架的Java智慧医院门诊管理系统完整项目源码,面向计算机相关专业的课程设计与毕业设计人群,也适合想通过真实项目巩固Java Web开发技能的进阶学习者。系统覆盖注册登录、挂号、就诊、缴费、药品管理与信息管理等门诊核心…

2026/10/18 22:09:28 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →