AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 22
C++ 中的 lambda 语法: [](…) { … }
C++ SELF
等级 22,
课时 0
我们来讲解如何阅读和编写 C++ 中的 lambda 表达式:它的形式由哪些部分组成
[]
(…)
->
T
{ … }
, 如何指定参数和返回类型,如何实现“创建并立即调用” (
[]
{ … }
()
), 以及常见的错误(漏掉
;
、 误以为会自动执行、整数除法、return 中不同类型的返回值)。
捕获变量: [&], [=], [x], [&x] 与错误
C++ SELF
等级 22,
课时 1
讲解 C++ lambda 中的捕获列表如何工作:按值捕获(
[x]
,
[=]
)和按引用捕获(
[&x]
,
[&]
)、混合形式(
[=, &count]
)、用于内部状态的关键字
mutable
,以及主要陷阱——引用捕获时的生命周期问题、参数遮蔽和典型错误,这些错误要么导致无法编译,要么导致不可预测的行为。
Generic lambdas:
[]
(
auto
&
x){...} 作为 “软模板”
C++ SELF
等级 22,
课时 2
解析 C++ 中的 generic lambda:参数中
auto
的工作方式,为什么这类似于“软模板”,lambda 主体的限制在哪里(对像
+
或
size()
之类操作的要求),以及在实践中如何选择按值传递或按引用传递——
auto
、
auto
&
、
const
auto
&
——以避免不必要的拷贝和“不能用临时值调用”的问题。
std::function
— 何时需要及其代价
C++ SELF
等级 22,
课时 3
我们来讲解为什么在 C++ 中需要
std::function<R(Args...)>
:为什么每个 lambda 有自己的类型,如何在同一变量中保存具有相同签名的不同
callable
,如何处理“空”状态以及如何检查
if
(
f
)。讨论封装的代价:间接调用、可能的内存分配和昂贵的复制,然后实现一个基于
std::vector
的实用迷你命令调度器和处理器表。
算法中的 Lambda:sort、remove_if、transform
C++ SELF
等级 22,
课时 4
讲解 Lambda 表达式如何把 STL 算法变成“数据处理管道”:通过给
std::sort
传入比较器来指定排序规则,通过
std::remove_if
按谓词删除元素(并通过
erase
正确收尾),然后通过
std::transform
构造派生数据。同时巩固严格顺序(使用
<
而非
<=
)、“删除当…” 谓词的含义以及在 Lambda 中谨慎捕获设置的做法。
Please enable JavaScript to continue using this application.