Effective STL 编程技巧:提高 C++ 容器使用效率

需积分: 10 1 下载量 102 浏览量 更新于2024-07-20 收藏 1.27MB PDF 举报
Effective STL 英文版 Effective STL 英文版是 Scott Meyers 撰写的一本关于 C++标准模板库(STL)的书籍,旨在帮助读者更好地使用 STL 容器和算法。下面是对书籍中各个章节的知识点总结: Item1. 选择合适的容器 在使用 STL 容器时,选择合适的容器是非常重要的。不同的容器有不同的特点和使用场景,例如 vector 是一个动态数组,list 是一个双向链表,set 是一个排序树等。选择合适的容器可以提高程序的性能和可读性。 Item2. 警惕容器独立代码的illusion 许多开发者认为,使用 STL 容器可以写出与容器无关的代码,但是这是一种illusion。实际上,容器的选择和使用方式对程序的性能和可读性有很大的影响。 Item3. 使对象在容器中的复制变得便宜且正确 在使用 STL 容器时,对象的复制是一个非常重要的问题。我们需要确保对象的复制是便宜且正确的,以避免性能问题和内存泄露。 Item4. 使用 empty() 代替 size() == 0 在检查容器是否为空时,我们通常使用 size() == 0,然而,这种方法并不是最好的,因为它需要遍历整个容器。使用 empty() 方法可以更快地检查容器是否为空。 Item5. 优先使用成员函数而不是单元素对应的函数 在使用 STL 容器时,我们可以使用成员函数或单元素对应的函数。然而,成员函数通常比单元素对应的函数更高效,因为它们可以避免不必要的参数传递。 Item6. 警惕 C++ 的最讨厌的语法解析 C++ 的语法解析规则非常复杂,容易引起语法错误。开发者需要警惕这些语法解析规则,以避免编写错误的代码。 Item7. 在使用 new 分配的指针时,记得释放指针 在使用 STL 容器时,如果我们使用 new 分配的指针,我们需要记得释放这些指针,以避免内存泄露。 Item8. 永远不要创建 auto_ptr 容器 auto_ptr 是一种智能指针,但是它不能用于容器,因为它不能正确地管理指针的生命周期。 Item9. 选择合适的 erase 选项 在使用 STL 容器时,我们需要选择合适的 erase 选项,以避免性能问题和内存泄露。 Item10. 了解分配器约定和限制 STL 容器使用分配器来管理内存,我们需要了解分配器的约定和限制,以避免内存泄露和性能问题。 Item11. 了解自定义分配器的合法使用场景 自定义分配器可以用于特殊的内存管理场景,但是我们需要了解自定义分配器的合法使用场景,以避免内存泄露和性能问题。 Item12. 对 STL 容器的线程安全性有现实的期望 STL 容器的线程安全性是一个复杂的问题,我们需要对线程安全性有现实的期望,以避免线程安全问题。 Item13. 优先使用 vector 和 string vector 和 string 是 STL 容器中最常用的两个容器,它们提供了高效的内存管理和可读性。 Item14. 使用 reserve 来避免不必要的 realloc 在使用 vector 时,我们可以使用 reserve 来避免不必要的 realloc,以提高性能。 Item15. 警惕 string 实现的变化 不同的编译器和平台可能有不同的 string 实现,我们需要警惕这些变化,以避免编写错误的代码。 Item16. 了解如何将 vector 和 string 数据传递给遗留 API 在使用 vector 和 string 时,我们需要了解如何将数据传递给遗留 API,以避免数据损失和类型不匹配问题。 Item17. 使用“swap trick”来 trim excess capacity 在使用 vector 时,我们可以使用“swap trick”来 trim excess capacity,以提高性能。