Effective STL 阅读笔记
目的:c++是一门易学难用的语言。本书的总结了50个条款,有些已经过时,有些还很有效。目的是使读者在开发中做出更有效的选择,并避开一些陷阱。
先挂个目录,慢慢补充。
第一章 容器
1、慎重选择容器类型
2、不要试图编写独立于容器类型的代码
3、确保容器中的对象拷贝正确且高效
4、调用empty而不是检查size()是否为0
5、区间成员函数优先于对应的单元素成员函数
6、当心c++的分析机制
7、用new在队中创建的内存,析构前要销毁
8、不要创建包含auto_ptr的容器对象
9、慎重选择删除元素的方法
10、了解allocator(分配器)的约定和限制
11、理解自定义allocator的合理用法
12、不要依赖STL的线程安全
第二章 vector和string
13、vector和string优于动态分配的数组(?vector不就是动态分配的数组吗)
14、用reserve来避免不必要的重新分配
15、注意string实现的多样性
16、了解如何把vector和string传给旧的API接口
17、用swap技巧去除多余的容量
18、避免使用vector<bool>
第三章 关联容器
19、理解相等(equality)和等价(equivalence)的区别
20、为包含指针的关联容器指定比较类型
21、让比较函数在等值的情况下返回false
22、切勿直接修改set或multiset中的键(key)
23、考虑用排序的vector替代关联容器
24、当效率至关重要时,谨慎选择map::operator[]和map::insert
25、熟悉非标准的哈希容器(现在STL提供了标准的哈希容器,unordered_map和unordered_set)
第四章 迭代器
26、iterator优先于const_iterator、reverse_iterator和const_reverse_iterator
27、使用distance和advance将容器的const_iterator转换为iterator
28、正确理解有reverse_iterator的base()成员函数所产生的iterator的用法
29、对于逐个字符的输入考虑istreambuf_iterator
第五章 算法
30、确保目标区间足够大(确保不会越界)
31、了解各种与排序有关的选择
32、删除元素时,需要在remove算法后调用erase
33、对包含指针的容器使用remove算法时要小心
34、了解哪些算法需要有序的区间作为参数
35、通过mismatch或lexicographical_compare实现简单的忽略大小写的字符串比较
36、理解copy_if算法的正确实现
37、使用accumulate或者for_each进行区间统计
第六章 函数子(?)、函数子类、函数及其他
38、遵循按值传递的原则来设计函数子类
39、确保判别式是“纯函数”
40、若一个类是函数子,则应使它可配接(?)
41、理解ptr_fun、mem_fun和mem_fun_ref的由来
42、确保less<T>与operator<具有相同的语义
第七章 在程序中使用STL
43、算法调用优先于手写的循环
44、容器的成员函数优先于同名的算法
45、正确区分count、find、binary_search、lower_bound、upper_bound和equal_range
46、考虑使用函数对象而不是函数作为STL算法的参数(为啥?)
47、避免产生write-only的代码
48、注意#include正确的头文件
49、学会分析与STL相关的编译器的诊断信息
(我推荐www.cplusplus.com,非常全面,唯一缺点是纯英文)
#C/C++#