《Effective STL中文版译序

就像本书的前两本姊妹作(Effective C++、More EffectiveC++)一样,本书的侧重点仍然在于提升读者的经验,只不过这次将焦点瞄准了C++标准库,而且是其中最有意思的一部分——STL。

C++是一门易学难用的编程语言,从学会使用C++到用好C++需要经过不断的实践。Scott Meyers 的这三本姊妹作分别从各个不同的角度来帮助你缩短这个过程。C++语言经过了近二十年的发展,已渐趋完善。尽管如此,在使用C++语言的时候,仍然有许多陷阱,有的陷阱非常明显,一经点拨就可以明白;而有的陷阱则不那么直截了当,需要仔细地分析才能揭开那层神秘的面纱。

本书是针对STL 的经验总结,书中列出了50 个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。这是作者在教学和实践过程中总结出来的经验,其中的内容值得我们学习和思考。

STL 的源码规模并不大,但是它蕴含的思想非常深刻。在C++标准化的过程中,STL 也被定格和统一。对于每一个STL 实现,我们所看到的被分为两部分:一是STL 的接口,这是应用程序赖以打交道的基础,也是我们所熟知的STL;二是STL 的实现,特别是一些内部的机理,有的机理是C++标准所规定的,但是有的却是实现者自主选择的。在软件设计领域中有一条普遍适用的规则是“接口与实现分离”,但是对于STL,你不能简单地使用这条规则。虽然你写出来的程序代码只跟STL 的接口打交道,但是用好STL 则需要建立在充分了解STL 实现的基础之上。你不仅需要了解对所有STL 实现都通用的知识,也要了解针对你所使用的STL 实现的特殊知识。那么,你该如何来把握接口与实现之间的关系呢?本书讲述了许多既涉及接口也关系到具体实现的STL 用法,通过对这些用法的讲解,读者可以更加清楚地了解应该如何来看待这些与实现相关的知识。

这两年来,有关STL 的书籍越来越多,而且许多C++书籍也开始更加关注于STL 这一部分内容。对于读者来说,这无疑是一件好事,因为STL 难学的问题终于解决了。我们可以看到,像vector 和string 等常用的STL 组件几乎出现在任何一个C++程序中。但是,随之而来的STL难用的问题却暴露出来了,程序员要想真正发挥STL 的强大优势并不容易。在现有的STL 书籍中,像本书这样指导读者用好STL 的书籍并不多见。

本书沿袭了作者一贯的写作风格,以条款的形式将各种使用STL 的经验组织在一起,书中主要包括以下内容:

如何选择容器的类型。STL 中容器的类型并不多,但是不同的容器有不同的特点,所以选择恰当的容器类型往往是解决问题的起点。本书中还特别介绍了与vector 和string两种容器有关的一些注意事项。

涉及关联容器有更多的陷阱,一不留神就可能陷入其中。作者专门指出了关联容器中一些并不直观的要点,还介绍了一种非标准的关联容器——散列容器。

迭代器是STL 中指针的泛化形式,也是程序员访问容器的重要途径。本书讨论了与const_iterator 和reverse_iterator 有关的一些问题。以我个人之见,本书这部分内容略显单薄,毕竟迭代器在STL 中是一个非常关键的组件。

STL 算法是体现STL 功能的地方,一个简单的算法调用或许完成了一件极为复杂的事情,但是要用好STL 中众多的算法并不容易,本书给出了一些重要的启示。

函数对象是STL 中用到的关键武器之一,它使得STL 中每一个算法都具有极强的扩展性,本书也特别讨论了涉及函数和函数对象的一些要点。

其他方方面面,包括在算法和同名成员函数之间如何进行区别、如何考虑程序的效率、如何保持程序的可读性、如何解读调试信息、关于移植性问题的考虑,等等。

本书并没有面面俱到地介绍所有要注意的事项,而只是挑选了一些有代表性的,也是最有普遍适用性的问题和例子作为讲解的内容。有些问题并没有完美的解决方案,但是,作者已经把这个问题为你分析透了,所以最终的解决途径还要取决于作为实践者的你。

本书的翻译工作是我和陈铭、邹开红合作完成的,其中邹开红完成了前25 条的初译工作,陈铭完成了后25 条的初译工作,最后我完成了所有内容的终稿工作,同时我也按照原作者给出的勘误作了修订。错误之处在所难免,请读者谅解。

对于每一个期望将STL 用得更好的人,这本书值得一读。

潘爱民

本文节选自《Effective STL中文版》一书

潘爱民 陈铭 邹开红 著

电子工业出版社出版

《Effective STL中文版》译序相关推荐

  1. JAVA编程调优全集-性能设计沉思录(12)

    各文章各专题涉及到还原实践中的场景,原理,方法,模型,代码,原则,设计等:精心打造系列分享,阅读者仔细了解,必定有所收获,也可以收藏,日后工作中参考. 线程与JVM调优专题:设计模式调优-性能设计沉思 ...

  2. 设计模式调优-性能设计沉思录(10)

    JAVA调优系列文章 JVM调优全面探讨-性能设计沉思录(1)_luozhonghua2000的博客-CSDN博客 JVM GC回收和内存分配优化-性能设计沉思录(2)_luozhonghua2000 ...

  3. JVM调优全面探讨-性能设计沉思录(1)

    为什么要jvm gc可能是java程序猿或非java程序猿讨论最多的话题,到底怎么回事? 本篇内容:内存管理发展史,JVM内存管理分析和实践(基础知识),JVM8调优(内存运行原理和编译优化)  :2 ...

  4. 科技,美学,人性——交互设计的十字路口

    交互设计沉思录 好久没有正儿八经写笔记了,翻完两遍<交互设计沉思录>,还是云里雾里,不得不借助敲键盘来整理一下思路. 这是一本探讨理论的书.这类书很难写,读者一般在读的过程中频频点头认同作 ...

  5. 迪克森沉思录之做Global SAP项目的弊端

    迪克森沉思录之做Global SAP项目的弊端 笔者在过去的十年里,参与过好几个大型跨国企业在国内工厂的SAP推广实施项目,这种项目就是将总部设计好的全球模板推广到其海外工厂,使得其诸多海外工厂能按照 ...

  6. PHP沉思录-第三篇-Smarty-左轻侯-《程序员》2007年10月号

    为什么80%的码农都做不了架构师?>>>    创建时间:2007-10-31 21:23:11   最后修改时间:2007-10-31 21:23:11 PHP沉思录之三:Smar ...

  7. ASP.NET Core 沉思录 - 结构化日志

    在 <ASP.NET Core 沉思录 - Logging 的两种介入方法>中我们介绍了 ASP.NET Core 中日志的基本设计结构.这一次我们来观察日志记录的格式,并进一步考虑如何在 ...

  8. 软件开发沉思录--ThoughtWorks文集

    软件开发沉思录--ThoughtWorks文集 市场价 :¥39.00 会员价 : ¥29.25(75折) [原出版社] Pragmatic Bookshelf  [作 者]ThoughtWorks公 ...

  9. 《C++沉思录 第2版》

    内容简介: <C和C++经典著作•C++沉思录:Ruminations on C++>基于作者在知名技术杂志发表的技术文章.世界各地发表的演讲以及斯坦福大学的课程讲义整理.写作而成,融聚了 ...

  10. 读书笔记∣概率论沉思录 01

    概率的解释基础分为两种,一是物理世界本身存在的随机性(客观概率),二是是我们由于信息不足而对事件发生可能性的度量(主观概率).基于此,形成了概率论的两大学派:频率论学派(传统数理统计学)和贝叶斯统计学 ...

最新文章

  1. 2021年4月16日 阿里供应链Java研发实习面试(二面)
  2. kali安装步骤失败 选择并安装软件_Pycharm2019.3.3软件安装步骤
  3. matlab对一行矩阵fft,MATLAB?fft命令
  4. linux下q和q 的区别,linux命令中q、wq、q!的区别
  5. 小程序开发代码_企业为什么要选择小程序定制开发?
  6. 解决go get下载包失败问题
  7. 单片机c语言曲普两只蝴蝶,51单片机蜂鸣器播放音乐代码(生日快乐 两只蝴蝶 祝你平安)...
  8. SaaS服务和个性化需求,就不能鱼和熊掌兼得吗?
  9. 【ANSYS命令流】为什么是命令流?
  10. Android应用切换皮肤功能实现
  11. 闲人闲谈ERP项目逸事——德国做SAP项目回忆
  12. Rstudio 更改工作路径和安装包的路径
  13. 我用源码搭建直播网站
  14. 计算机在我们的生活中越来越重要英语,职业高中高一下学期期末英语试题卷5(含答案)...
  15. 打印机无法连接0x000000709
  16. 【资讯】辉煌十载!BDTC 2017 中国大数据技术大会在京盛大召开
  17. 电影文件长长的文件名是这个意思
  18. LINUX-S3C2440-SJA1000驱动程序-笔记
  19. codeblocks:: frotran 调用dll(详细)
  20. Mac系统怎样管理第三方字体

热门文章

  1. fullPage最后一屏自适应
  2. android studio connot resolve
  3. Android怎样实现毛玻璃效果之Android高级模糊技术
  4. php文件之间传值的三种主流并且常用的方式
  5. PHP SPhinx::SetLimits 注意事项
  6. 类似GoogleMap地图网站的简单实现(1)
  7. 40.django中重要概念
  8. Dynamics CRM - 不同类型字段在 Plugin 里的赋值方式
  9. info - 阅读 info 文档
  10. 金三银五,金九银十,找工作的好时间