← 返回首页

Effective STL

Scott Meyers 的 Effective STL 是 STL 编程的经典指南,以下是核心条款摘要。

容器选择

条款1:仔细选择你的容器

标准 STL 序列容器:vector、string、deque 和 list。

标准 STL 关联容器:set、multiset、map 和 multimap。

非标准序列容器:slist(单向链表)和 rope(重型字符串)。

非标准关联容器:hash_set、hash_multiset、hash_map、hash_multimap。

容器分类

连续内存容器(基于数组):vector、string、deque。元素在连续内存块中存储,插入/删除需要移动其他元素。

基于节点的容器:list、slist、所有标准关联容器(平衡树实现)。插入/删除只影响指针,不影响元素内容。

使用建议

条款2:小心对"容器无关代码"的幻想

不同容器的迭代器失效规则不同,编写容器无关代码非常困难。

条款3:使容器里对象的拷贝操作轻量而正确

拷贝对象是 STL 的方式。一个使拷贝更高效、正确且对分割问题免疫的简单方式是指针容器(而非对象容器)。

条款4:用 empty 代替 size() == 0

empty() 对所有容器都是常数时间操作,而 size() 在某些容器(如 list)上可能是线性时间。