跳到正文

第9章学习笔记:STL算法与函数式组合

课程笔记

通过逐步可编译的程序掌握STL算法与函数式组合,从现象走到语言规则、资源状态和工程证据。

关联:章节 第9章 STL算法与函数式组合

第9章笔记:STL算法与函数式组合

本章问题

通过逐步可编译的程序掌握STL算法与函数式组合,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 算法与容器分离:规则 algorithm consumes an iterator range;实验任务为写一个能编译运行的最小程序展示“算法与容器分离”,记录输入、关键对象状态、输出和编译命令,并用规则 algorithm consumes an iterator range 解释结果;严格边界为不得把“算法与容器分离”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《查找、计数与谓词》的输入或约束。
  • 查找、计数与谓词:规则 predicate is observable policy;实验任务为写一个能编译运行的最小程序展示“查找、计数与谓词”,记录输入、关键对象状态、输出和编译命令,并用规则 predicate is observable policy 解释结果;严格边界为不得把“查找、计数与谓词”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《排序、稳定性与比较器》的输入或约束。
  • 排序、稳定性与比较器:规则 strict weak ordering is required;实验任务为写一个能编译运行的最小程序展示“排序、稳定性与比较器”,记录输入、关键对象状态、输出和编译命令,并用规则 strict weak ordering is required 解释结果;严格边界为不得把“排序、稳定性与比较器”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《变换、累积与归约》的输入或约束。
  • 变换、累积与归约:规则 fold order affects result;实验任务为写一个能编译运行的最小程序展示“变换、累积与归约”,记录输入、关键对象状态、输出和编译命令,并用规则 fold order affects result 解释结果;严格边界为不得把“变换、累积与归约”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《删除惯用法与ranges》的输入或约束。
  • 删除惯用法与ranges:规则 erase removes after logical deletion;实验任务为写一个能编译运行的最小程序展示“删除惯用法与ranges”,记录输入、关键对象状态、输出和编译命令,并用规则 erase removes after logical deletion 解释结果;严格边界为不得把“删除惯用法与ranges”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《算法复杂度与成本模型》的输入或约束。
  • 算法复杂度与成本模型:规则 complexity counts dominant operations;实验任务为写一个能编译运行的最小程序展示“算法复杂度与成本模型”,记录输入、关键对象状态、输出和编译命令,并用规则 complexity counts dominant operations 解释结果;严格边界为不得把“算法复杂度与成本模型”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《算法管线实验》的输入或约束。
  • 算法管线实验:规则 pipeline preserves intermediate contracts;实验任务为写一个能编译运行的最小程序展示“算法管线实验”,记录输入、关键对象状态、输出和编译命令,并用规则 pipeline preserves intermediate contracts 解释结果;严格边界为不得把“算法管线实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《错误码、optional与expected思路》的输入或约束。

实验闭环

从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。

复盘

错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。