Effective STL:选择与使用的智慧
4星 · 超过85%的资源 需积分: 29 56 浏览量
更新于2024-11-28
收藏 1.46MB PDF 举报
"Effective STL.pdf"
《Effective STL》是一本由Scott Meyers撰写的关于标准模板库(STL)使用的经典书籍。这本书提供了一系列实践性的编程准则,旨在帮助程序员更高效、更正确地使用STL容器、算法和迭代器。以下是对其中一些关键知识点的详细解释:
1. 选择合适的容器:不同的STL容器(如vector、list、set、map等)有不同的性能特征,应根据需求选择最合适的。例如,vector适合随机访问,而list适合频繁的插入和删除。
2. 避免对容器独立代码的误解:编写与容器类型无关的代码看似理想,但往往难以实现,因为不同容器的操作和性能特性差异显著。
3. 优化对象复制:容器中的对象经常被复制,确保复制操作既快速又正确至关重要,例如,通过使用浅拷贝或深拷贝来处理复杂对象。
4. 使用empty而非size()检查零:容器为空时,调用empty()比检查size()是否为零更高效且清晰。
5. 优先使用范围成员函数:如`for_each`和`transform`,它们通常比单元素版本更简洁且更高效。
6. 警惕C++的最烦人解析(Most Vexing Parse):在声明函数对象或使用模板时,要小心避免C++语法陷阱,可能导致意外的构造函数调用。
7. 管理动态分配的指针容器:当容器存储new创建的指针时,记得在容器销毁前释放这些指针,防止内存泄漏。
8. 不要在容器中使用auto_ptr:auto_ptr不适用于容器,因为它不支持共享所有权,应使用智能指针如unique_ptr或shared_ptr。
9. 慎重选择erase选项:不同的erase方法可能会影响容器的迭代器和引用,比如erase返回的新迭代器位置,以及可能触发的重新分配。
10. 了解allocator的约定和限制:allocator在STL中负责内存分配,但其行为并非完全一致,了解其工作方式可以避免意外。
11. 自定义allocator的合理使用:在特定情况下,自定义allocator可以优化内存管理,但大多数情况下标准allocator已经足够。
12. 对STL容器的线程安全有现实期望:STL容器并非线程安全,需要在多线程环境中自行管理同步。
13. 优先使用vector和string:相对于动态数组,vector和string提供了更多便利的功能,如自动扩展和异常安全。
14. 使用reserve避免不必要的重新分配:在预先知道大小的情况下,调用reserve可以减少vector或string的内存重新分配次数。
15. 注意string实现的差异:不同编译器的string实现可能存在细微差别,这可能影响性能或行为。
16. 将vector和string数据传递给遗留API:与遗留API交互时,可能需要将STL容器转换为旧式C风格的数组或指针。
17. 使用“交换技巧”修剪多余容量:当不再需要额外容量时,可以使用swap函数将容器与一个空容器交换,以释放内存。
这些指导原则是STL高效编程的基础,理解和遵循这些规则,可以提升代码质量并减少潜在问题。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-05-26 上传
2012-02-28 上传
2009-02-13 上传
2014-07-30 上传
2008-11-05 上传
darkduck9989
- 粉丝: 13
- 资源: 28
最新资源
- ASP.NET中常用的优化性能的方法
- 高能X射线工业CT数据传输系统的设计.pdf
- 步进电机驱动与原理 DK615步进电机原理与驱动
- 软件需求说明书软件工程
- sql语言参考pdf
- 关于在FPGA中实现双核NIOS处理器
- MyEclipse 6 Java 开发中文教程_免费电子版
- 2009思科路由协议挑战100问
- 12 Hibernate 一对多.doc
- 传智播客 ajax核心技术 PPT
- 点阵式LED简单图形显示技术.doc
- 7 Struts 入门开发.doc
- 6 Web 入门开发.doc
- 4 MyEclipse JPA 快速入门开发
- DWR中文简介与用法
- 基于单片机的LED汉字显示屏设计与制作