Effective STL:选择与使用的智慧
"Effective STL是Addison Wesley出版社出版的一本关于C++ STL使用的指南,由Scott Meyers撰写。这本书深入探讨了如何有效地利用STL(Standard Template Library,标准模板库)来提升C++程序的效率和可维护性。" 在《Effective STL》中,作者详细阐述了15个关于STL容器的要点,以下是一些关键知识点的概述: 1. 选择容器时要谨慎:不同的容器有不同的性能特征和用途,如vector适合动态数组,list适合频繁插入删除,map和set用于关联容器等。理解这些差异能帮助我们选择最适合当前需求的容器。 2. 避免对容器独立代码的错觉:尽管STL提供了通用接口,但特定容器的实现可能会影响代码的性能。编写代码时应考虑具体使用的容器。 3. 优化对象复制:确保容器中的对象复制快速且正确,避免深拷贝带来的性能开销,必要时可以使用浅拷贝或智能指针。 4. 使用empty而不是size()等于零检查:某些容器实现中,empty可能更高效。 5. 优先使用范围版本的成员函数:例如,使用`for_each`而非`find_if`,因为范围版本可以减少迭代次数。 6. 警惕C++的最烦人解析(Most Vexing Parse):某些语句可能被解析为函数声明,而不是对象实例化,导致编译错误。正确使用括号防止这类问题。 7. 管理容器内的newed指针:确保在容器销毁前手动删除指针,以避免内存泄漏。 8. 不要在容器中使用auto_ptr:auto_ptr不支持拷贝语义,可能导致意外的资源丢失。 9. 选择合适的删除选项:删除元素时,注意选择erase()的不同版本,以及它对迭代器的影响。 10. 了解分配器的约定和限制:分配器影响容器内存管理,自定义分配器时需遵循一定的规则。 11. 对自定义分配器有清晰认识:虽然很少需要,但在特定场景下,自定义分配器能优化内存分配和性能。 12. 对STL容器的线程安全性有现实期望:大部分STL容器不是线程安全的,多线程环境下使用时需自行同步。 13. 优先使用vector和string:相对于动态分配的数组,它们提供了更丰富的接口和更好的性能。 14. 使用reserve避免不必要的重新分配:在预知容器大小时,调用reserve可以提前分配足够的空间,减少元素移动。 15. 注意string实现的差异:不同编译器或库的string实现可能有所不同,了解这些差异有助于写出更兼容的代码。 16. 将vector和string数据传递给遗留API:可能需要将这些容器转换为旧式C风格数组,以与不支持STL的代码交互。 17. 使用“swap技巧”修剪多余容量:通过交换两个容器,可以释放不再需要的容量,提高内存使用效率。 以上只是《Effective STL》中部分知识点的简要介绍,实际书籍中每个条目都有详细的解释和示例,是深入理解并有效使用C++ STL的重要参考资料。
![](https://csdnimg.cn/release/download_crawler_static/10118872/bg10.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10118872/bg11.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10118872/bg12.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10118872/bg13.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10118872/bg14.jpg)
剩余197页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/151e6336670e459e8d6ee1cb4c262f50_weixin_40744962.jpg!1)
- 粉丝: 0
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)