Effective STL:选择与使用容器的策略

需积分: 50 2 下载量 188 浏览量 更新于2024-07-24 收藏 1.85MB PDF 举报
"《Effective STL》是一本关于标准模板库(STL)的英文经典著作,提供了高清PDF格式的影印版。这本书深入探讨了在使用STL时如何编写高效、正确的代码,涵盖了一系列关于容器、迭代器、算法和分配器的最佳实践。" 在《Effective STL》中,作者通过一系列条目详细阐述了STL的关键知识点: 1. 选择容器需谨慎(Choose your containers with care):不同的STL容器有不同的特性和性能特点,如vector适合动态数组,list适合频繁插入和删除,应根据具体需求选择合适的容器。 2. 避免容器独立代码的幻觉(Beware the illusion of container-independent code):虽然STL设计成可互换的接口,但实际实现可能有差异,编写代码时应考虑容器的具体行为。 3. 使容器内对象的复制既经济又正确(Make copying cheap and correct for objects in containers):确保对象的拷贝构造函数和赋值操作符有效且效率高,以优化容器中的对象复制。 4. 使用empty而不是检查size()是否为零(Call empty instead of checking size() against zero):对于判断容器是否为空,直接调用empty方法更高效且清晰。 5. 优先使用范围成员函数(Prefer range member functions to their single-element counterparts):如使用push_back(range)代替逐个元素的push_back,可以提高效率。 6. 当心C++的最烦人解析(Be alert for C++'s most vexing parse):避免因隐式类型转换导致的错误,尤其是在使用new表达式时。 7. 使用容器管理的指针时,记得在容器销毁前释放指针(When using containers of newed pointers, remember to delete the pointers before the container is destroyed):防止内存泄漏。 8. 不要在容器中使用auto_ptr(Never create containers of auto_ptrs):auto_ptr不适用于容器,因为它的所有权转移可能导致意外的行为。 9. 在删除元素时仔细选择选项(Choose carefully among erasing options):删除容器元素时要考虑效率和语义,如erase迭代器或使用remove/erase idiom。 10. 了解分配器的约定和限制(Be aware of allocator conventions and restrictions):自定义分配器时,必须遵循C++标准规定的接口和行为。 11. 明确理解定制分配器的合法用途(Understand the legitimate uses of custom allocators):在特定场景下,如多线程环境或特定内存管理需求时,可能需要自定义分配器。 12. 对STL容器的线程安全性有现实的期望(Have realistic expectations about the thread safety of STL containers):STL容器本身并不保证线程安全,多线程操作时需要额外同步。 13. 优先使用vector和string(Prefer vector and string to dynamically allocated arrays):STL的vector和string提供了更丰富的功能,如自动内存管理,更易于使用和调试。 14. 使用reserve避免不必要的重新分配(Use reserve to avoid unnecessary reallocations):在向vector添加元素前,可以通过reserve预先分配足够的空间,减少内存重分配的开销。 15. 注意不同string实现的差异(Be aware of variations in string implementations):不同编译器或库的string实现可能存在细微差别,编写跨平台代码时要留意。 16. 知道如何将vector和string数据传递给遗留API(Know how to pass vector and string data to legacy APIs):可能需要将STL容器转换为C风格的数组或指针。 17. 利用“swap技巧”来修剪多余容量(Use "the swap trick" to trim excess capacity):通过交换容器与临时容器的引用,可以有效地释放不再需要的容量,优化内存使用。 这些条目覆盖了STL使用中的许多常见问题和最佳实践,对理解和优化STL程序设计大有裨益。通过学习本书,开发者可以更好地利用STL提高代码的效率和可维护性。