Effective STL
Effective STL 是一本关于 C++ 标准模板库(STL)的编程指南,旨在帮助开发者更好地使用 STL 容器和算法。下面是对该书中重要知识点的总结:
1. 选择合适的容器
在选择容器时,需要考虑容器的类型、大小和元素的特点。不同的容器有不同的优缺,例如 vector 和 list 分别适用于不同的场景。开发者需要根据实际情况选择合适的容器,以提高程序的效率和可读性。
2. 警惕容器独立代码的幻觉
许多开发者认为,使用 STL 容器可以写出与容器无关的代码,但是这是一种幻觉。实际上,容器的选择和使用对程序的性能和可读性都有很大的影响。开发者需要了解容器的特点和限制,以写出高效、可读的代码。
3. 确保对象的拷贝是廉价和正确的
在容器中,对象的拷贝是一个非常重要的操作。开发者需要确保对象的拷贝是廉价和正确的,以避免程序的性能下降。同时,开发者也需要了解容器对对象拷贝的要求和限制。
4. 使用 empty() 而不是 size() == 0
在检查容器是否为空时,开发者通常使用 size() == 0,但是这并不是最好的方法。使用 empty() 可以提高程序的效率和可读性。
5. 优先使用成员函数
在使用容器时,开发者可以使用成员函数或单元素操作。成员函数通常比单元素操作更高效和可读。开发者需要了解成员函数的优点和使用方法,以提高程序的效率和可读性。
6. 警惕 C++ 的最讨厌的解析
C++ 的语法规则可以导致一些讨厌的解析错误。开发者需要了解这些规则和限制,以避免程序的错误和崩溃。
7. 使用 new 的指针时,记得删除指针
在使用 new 创建指针时,开发者需要记得删除指针,以避免内存泄露。同时,开发者也需要了解容器对指针的要求和限制。
8. 不要创建 auto_ptr 的容器
auto_ptr 是一种智能指针,但是它不能用于容器。开发者需要了解 auto_ptr 的限制和使用方法,以避免程序的错误和崩溃。
9. 选择正确的擦除选项
在使用容器时,开发者需要选择正确的擦除选项,以避免程序的性能下降。同时,开发者也需要了解擦除选项的优点和限制。
10. 了解分配器约定和限制
STL 容器使用分配器来管理内存。开发者需要了解分配器的约定和限制,以避免程序的错误和崩溃。
11. 了解自定义分配器的合法使用
自定义分配器可以帮助开发者更好地管理内存。开发者需要了解自定义分配器的合法使用方法和限制,以避免程序的错误和崩溃。
12. 对 STL 容器的线程安全有现实的期望
STL 容器的线程安全是一个复杂的问题。开发者需要了解 STL 容器的线程安全机制和限制,以避免程序的错误和崩溃。
13. 优先使用 vector 和 string
vector 和 string 是 STL 中最常用的容器。开发者需要了解 vector 和 string 的优点和使用方法,以提高程序的效率和可读性。
14. 使用 reserve 来避免不必要的重新分配
在使用 vector 和 string 时,开发者需要了解 reserve 的使用方法,以避免不必要的重新分配。
15. 警惕 string 实现的变化
string 的实现可能会有所不同。开发者需要了解 string 的实现和限制,以避免程序的错误和崩溃。
16. 了解如何将 vector 和 string 数据传递给遗留 API
在使用遗留 API 时,开发者需要了解如何将 vector 和 string 数据传递给这些 API,以避免程序的错误和崩溃。
17. 使用“swap trick”来 trim excess capacity
在使用 vector 和 string 时,开发者可以使用“swap trick”来 trim excess capacity,以提高程序的效率和可读性。