BOOK / SOURCE & READING RECORD
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
Scott Meyers
English first edition, 2001; full Chinese edition read: 清华大学出版社2006年4月第1版第1次印刷,潘爱民、陈铭、邹开红译,ISBN7-302-12695-X;另读2011英文电子版出版社样章
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
已读完222页中文扫描本的全部实质内容:引言、Items1–50、参考书目、附录A/B(印刷页1–208,PDF15–222)。PDF1–99读取远程OCR全文,另直接核对21、38、70–71页图示;服务限流后不再请求OCR,PDF100–222逐页直接读图,包括全部代码、表格和插图。版权页核实2006年4月中文第1版第1次印刷。另读英文出版社Items1–4、16、21、44;不把中文全书通读说成英文全书通读。
查看版本、实际阅读范围与原文入口 →Sources
Effective STL Chinese first-printing scan, private research only
222页扫描件已读:正文50条、引言、参考书目与附录A/B,印刷1–208。PDF4版权页确认译者、出版社、ISBN及2006年4月版印次。第三方可访问不代表获准再分发。
研究副本不在本站公开链接。
- Pearson/InformIT sample pages, Items 1–4
正文Items1–4,印刷页11–24;Item5仅开头一句,不计已读。
- Effective STL Item 16 publisher excerpt
全部4页:vector/string与传统API边界。
- Effective STL Item 21 publisher excerpt
全部3页:严格比较而非小于等于。
- Effective STL Item 44 publisher excerpt
全部3页:成员查找与通用算法的语义和复杂度差别。
- InformIT catalog and full contents
第一版、50条目录、电子书购买入口;不是免费全文。
容器的等价关系是业务契约的一部分
中文版Items19–21,印刷67–77;Items44–45,160–169;另核对英文出版社Items21、44
Item 21 与44合在一起看,可以发现查找并不只是速度选择:有序容器判断两个键是否等价,要看比较器是否认为任何一方排在另一方之前;普通 find 则依赖等号。若业务选择按编号分组,两个附带标签不同的对象可以在集合里等价,却不一定按对象等号相等。因此迁移查找方式必须先保留身份定义,再讨论复杂度。比较器反向排序应交换参数,不能直接否定原结果。历史版本把 hashed containers 称为非标准,也讨论非恒定时间 list::size;C++20 已有 unordered 容器且 list::size 为常数复杂度,不能原样推广这些旧结论。
把长期契约与时代限制分开阅读
中文版Items14、28、30、32、36、39,印刷53–55、101–103、106–110、115–118、128–130、139–142;附录A/B,195–208
全书值得迁移到今天的是边界意识:reserve提供容量而不创建元素,remove压紧保留区间而不缩小容器,反向迭代器的base指向相邻正向位置,状态化判别式不能依靠算法只保留一份对象。这些都是可检验的契约。另一方面,书中没有copy_if、关联容器erase不返回迭代器、分配器不可携带状态以及string可以写时复制等背景已经变化;应分别用标准copy_if、erase返回位置、allocator_traits及现代字符串规则重新审视。附录A更提醒我,不区分大小写不是把字节机械转小写:语言、区域与排序规则必须成为接口约定。附录B针对MSVC4–6的替代库建议只属于历史材料。
相关基础课
map 与 set:有序关联和比较器契约算法:sort、边界查找与 erase-remove迭代器:能力类别、范围与有效性vector:增长、容量与失效规则