Effective STL:提升标准模板库使用效率的50个技巧

需积分: 29 4 下载量 32 浏览量 更新于2024-11-29 收藏 1.46MB PDF 举报
"Effective.STL" 是一本关于如何更有效地使用标准模板库(STL)的书籍,由50个具体的方法组成,旨在提升你对STL的使用效率。 1. 容器选择:选择容器时需谨慎。不同的STL容器如vector、list、set、map等有不同的特性和性能表现,应根据实际需求来决定使用哪种容器。 2. 避免容器独立代码的幻觉:编写代码时,不应假设容器的行为是通用的,因为每个容器都有其特定的操作和行为方式。 3. 使容器中对象的复制廉价且正确:当容器中包含的对象被复制时,确保复制构造函数和赋值操作符有效且高效。 4. 使用empty而非检查size()是否为零:当检查容器是否为空时,直接调用empty()比检查size()是否等于0更高效且语义明确。 5. 优先使用范围成员函数:如用`for_each`代替多个单元素迭代,范围版本的函数通常更安全且可读性更强。 6. 警惕C++的最烦人解析:避免在没有显式类型说明的情况下,编译器可能错误地将初始化列表解释为函数声明。 7. 使用容器存储new分配的指针时,记得在容器销毁前删除它们:防止内存泄漏,确保恰当的生命周期管理。 8. 不要在容器中存储auto_ptr:auto_ptr在多线程或容器中的行为可能不预期,应使用智能指针如unique_ptr或shared_ptr。 9. 选择合适的erase选项:在删除元素时,考虑其可能对容器性能的影响,如erase()、remove()和unique()等。 10. 了解allocator的约定和限制:allocator是STL容器中用于内存分配的接口,理解其工作原理可以优化内存使用。 11. 了解自定义allocator的合法用途:在某些情况下,可能需要自定义allocator以满足特定内存需求或性能要求。 12. 对STL容器的线程安全性有现实期望:默认情况下,STL容器不是线程安全的,需要在多线程环境中自行管理同步。 13. 优先选择vector和string:对于动态分配的数组,vector和string提供了更丰富的功能,如自动增长和内存管理。 14. 使用reserve避免不必要的重新分配:在预先知道容器大小的情况下,使用reserve()来预先分配内存,减少动态扩展造成的开销。 15. 注意string实现的差异:不同编译器或库的string实现可能略有不同,了解这些差异可以帮助写出更兼容的代码。 16. 知道如何将vector和string数据传递给遗留API:如果需要与不支持STL的旧代码交互,了解如何正确转换数据格式。 17. 使用“swap技巧”修剪额外容量:通过交换两个vector或string,可以快速释放不再需要的容量,而无需复制所有元素。 这本书籍深入探讨了STL的这些关键点,帮助程序员避免常见陷阱,提升代码质量和效率。