Effective STL:选择与使用容器的策略
"Effective STL" 《Effective STL》是关于标准模板库(Standard Template Library, STL)的一本经典书籍,由Scott Meyers撰写。这本书提供了一系列实用的编程指导,帮助开发者更高效、更正确地使用STL。以下是书中的部分关键知识点: 1. 选择合适的容器:不同的容器有不同的特性和性能特点,例如,`std::vector`适用于随机访问,`std::list`则适合插入和删除操作。根据实际需求选择最适合的容器。 2. 避免容器独立代码的幻觉:容器的实现可能会影响代码性能,因此编写完全独立于具体容器的代码并不总是最佳实践。 3. 优化复制行为:确保容器内的对象具有廉价且正确的复制构造函数,这对于容器的拷贝和移动操作至关重要。 4. 使用`empty()`而非`size()==0`检查:直接调用`empty()`通常更高效,因为它避免了计算`size()`的开销。 5. 优先使用范围成员函数:如`for_each`,而不是单元素版本,这可以减少错误并提高效率。 6. 注意C++的最令人困扰的解析(Most Vexing Parse):避免在声明时误触发隐式类型转换,导致意外的结果。 7. 管理动态分配的指针:在容器销毁前删除其中的指针,以防止内存泄漏。 8. 避免在容器中存储`std::auto_ptr`:`auto_ptr`的复制行为与容器不兼容,可能导致意外的结果。 9. 考虑删除选项:在删除容器元素时,了解不同方法的差异,如`erase`和迭代器的直接释放。 10. 了解分配器的约定和限制:分配器影响内存管理,定制分配器时需遵循特定规则。 11. 合理使用自定义分配器:在需要特定内存策略或跨系统移植时,自定义分配器可以派上用场。 12. 对STL容器的线程安全性有现实预期:默认情况下,STL容器不是线程安全的,需要在多线程环境下额外处理同步问题。 13. 优先使用`std::vector`和`std::string`:它们提供了许多便利的函数,且在许多情况下比动态数组更高效。 14. 使用`reserve`避免不必要的重新分配:在预先知道大小的情况下,使用`reserve`可以避免`vector`和`string`在增长时频繁调整内存。 15. 注意`std::string`的实现差异:不同的编译器或库可能有不同的实现,这可能影响性能和行为。 16. 将`vector`和`string`数据传递给遗留API:了解如何正确传递这些容器的数据给不支持STL接口的旧代码。 17. 利用“交换技巧”修剪多余容量:通过交换两个`vector`或`string`来释放一个容器的多余容量,而无需创建新对象。 以上这些知识和技巧可以帮助开发者更深入地理解和利用STL,提高代码质量和性能。
![](https://csdnimg.cn/release/download_crawler_static/87286841/bg10.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87286841/bg11.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87286841/bg12.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87286841/bg13.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87286841/bg14.jpg)
剩余197页未读,继续阅读
![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://profile-avatar.csdnimg.cn/81483c8304154587befe8b3929c8c4f9_westwoodusa.jpg!1)
- 粉丝: 0
- 资源: 6
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
![](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)