Effective STL:选择与使用的智慧
需积分: 3 182 浏览量
更新于2024-07-30
收藏 1.8MB PDF 举报
"Effective STL 2"
在Effective STL这本书中,作者通过一系列的条目向读者揭示了如何更高效、更正确地使用STL(Standard Template Library,标准模板库)。以下是对部分条目的详细解读:
1. **选择合适的容器**:不同的容器有不同的特性和效率,如vector适合动态数组,list适合频繁插入和删除,map则适用于键值对的查找。选择容器时应考虑算法需求和性能影响。
2. **避免容器独立代码的幻觉**:虽然STL提供了通用接口,但不同的容器实现方式不同,可能导致代码在特定容器上行为异常。编写代码时应考虑具体容器的特性。
3. **使容器内对象的复制廉价且正确**:确保对象的拷贝构造函数和赋值操作符有效且高效,以优化容器内的元素复制。
4. **使用empty()而不是size()==0**:当检查容器是否为空时,推荐使用empty()函数,因为其更直观且在某些情况下更高效。
5. **优先使用范围成员函数**:如`for_each()`,`accumulate()`等,它们通常比单元素操作更高效,因为可以避免多次迭代。
6. **警惕C++的最烦人解析**(Most Vexing Parse):C++有时会将初始化列表解释为函数声明,导致意外。确保使用括号明确表示构造函数调用。
7. **管理new创建的指针容器**:当容器包含new创建的指针时,记得在容器销毁前删除这些指针,防止内存泄漏。
8. **避免使用auto_ptr于容器中**:auto_ptr不适用于容器,因为它的所有权转移机制与容器要求的复制行为不兼容。推荐使用智能指针如unique_ptr或shared_ptr。
9. **谨慎选择删除选项**:删除容器元素时,考虑是否需要保持顺序,以及元素是否需要被析构。了解erase()和remove()的区别。
10. **理解allocator的约定和限制**:allocator影响内存分配方式,但并非所有STL容器都允许自定义allocator。理解其工作原理以优化内存管理。
11. **定制allocator的合理使用**:在特定场景下,如内存池分配,自定义allocator可以提高效率,但应谨慎使用,避免引入复杂性。
12. **对STL容器的线程安全有现实期望**:默认情况下,STL容器不是线程安全的。在多线程环境中,需要自己处理同步问题。
13. **优先使用vector和string**:相对于动态数组,它们提供更丰富的接口,自动管理内存,且在某些情况下效率更高。
14. **使用reserve()避免不必要的reallocate**:在预先知道容器大小的情况下,使用reserve()可以避免因元素增加导致的频繁内存重新分配。
15. **注意字符串实现的差异**:不同编译器可能有不同的string实现,了解这些差异以便写出跨平台的代码。
16. **将vector和string数据传递给遗留API**:考虑转换为原始指针或使用C风格字符串,以适应不支持STL的旧API。
17. **利用“swap技巧”修剪过剩容量**:通过交换元素较少的容器和当前容器,可以有效地释放vector或string的多余容量,提高效率。
这些条目提供了关于STL的深入见解,帮助开发者编写出更高效、更健壮的C++代码。理解并应用这些原则,能够显著提升STL在实际项目中的表现。
2019-01-02 上传
2010-07-21 上传
2023-06-24 上传
2023-07-10 上传
2023-06-22 上传
2023-12-17 上传
2023-08-29 上传
2023-08-07 上传
2023-06-07 上传
acange
- 粉丝: 6
- 资源: 11
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解