C++ Algorithm Lab · Chapter 10
从“迭代器返回值”读懂真实状态
先预测,再逐步执行。你会看见逻辑末端与物理大小、lambda 捕获时刻,以及输出迭代器的写入契约如何共同决定结果。
123 切换 → 单步 R 重置
逻辑删除不会立即缩容
remove 压紧保留项,unique 压紧相邻唯一项;两者都只返回 new_end。
先选择判断,才能开始单步执行。
vector 物理存储
size = 7logical = 7new_end 偏移 = 7
[begin, new_end) 保留范围逻辑尾段
Lambda 记住的是“当时的值”还是“那个对象”?
在创建 lambda 后改变外部阈值,对比 [threshold] 与 [&threshold] 的筛选结果。
先作出判断,再观察两条捕获路径。
同一批数据,两份谓词状态
外部 threshold = 70
[threshold] 值捕获
内部副本 = 未创建
等待筛选
[&threshold] 引用捕获
当前读取 = 未创建
等待筛选
算法只负责“写”,输出空间必须由你保证
同时比较 resize + begin、空 vector.begin、back_inserter、front_inserter,并观察反向迭代器 base() 的偏移。
先判断目标迭代器是否真的可解引用。
四条输出路径
源元素 = 4写入需求 = 4 个槽位
反向迭代器:rbegin() 指向末元素→rbegin().base() == end()相差一个元素