第8章学习笔记:STL容器与迭代器
课程笔记通过逐步可编译的程序掌握STL容器与迭代器,从现象走到语言规则、资源状态和工程证据。
关联:章节 第8章 STL容器与迭代器
第8章笔记:STL容器与迭代器
本章问题
通过逐步可编译的程序掌握STL容器与迭代器,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。
七课连接
- vector与连续存储:规则
vector offers contiguous amortized growth;实验任务为写一个能编译运行的最小程序展示“vector与连续存储”,记录输入、关键对象状态、输出和编译命令,并用规则vector offers contiguous amortized growth解释结果;严格边界为不得把“vector与连续存储”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《deque、list与访问模型》的输入或约束。 - deque、list与访问模型:规则
list trades locality for stable nodes;实验任务为写一个能编译运行的最小程序展示“deque、list与访问模型”,记录输入、关键对象状态、输出和编译命令,并用规则list trades locality for stable nodes解释结果;严格边界为不得把“deque、list与访问模型”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《map与unordered_map》的输入或约束。 - map与unordered_map:规则
ordered tree versus hash table;实验任务为写一个能编译运行的最小程序展示“map与unordered_map”,记录输入、关键对象状态、输出和编译命令,并用规则ordered tree versus hash table解释结果;严格边界为不得把“map与unordered_map”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《set与去重检索》的输入或约束。 - set与去重检索:规则
set stores unique keys;实验任务为写一个能编译运行的最小程序展示“set与去重检索”,记录输入、关键对象状态、输出和编译命令,并用规则set stores unique keys解释结果;严格边界为不得把“set与去重检索”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《容器失效规则》的输入或约束。 - 容器失效规则:规则
mutation may invalidate handles;实验任务为写一个能编译运行的最小程序展示“容器失效规则”,记录输入、关键对象状态、输出和编译命令,并用规则mutation may invalidate handles解释结果;严格边界为不得把“容器失效规则”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《迭代器类别与范围》的输入或约束。 - 迭代器类别与范围:规则
iterator category limits operations;实验任务为写一个能编译运行的最小程序展示“迭代器类别与范围”,记录输入、关键对象状态、输出和编译命令,并用规则iterator category limits operations解释结果;严格边界为不得把“迭代器类别与范围”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《容器选择实验》的输入或约束。 - 容器选择实验:规则
choose by operations not habit;实验任务为写一个能编译运行的最小程序展示“容器选择实验”,记录输入、关键对象状态、输出和编译命令,并用规则choose by operations not habit解释结果;严格边界为不得把“容器选择实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《算法与容器分离》的输入或约束。
实验闭环
从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。
复盘
错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。