《Effective STL中文版》译序
《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中文版》译序相关推荐
- JAVA编程调优全集-性能设计沉思录(12)
各文章各专题涉及到还原实践中的场景,原理,方法,模型,代码,原则,设计等:精心打造系列分享,阅读者仔细了解,必定有所收获,也可以收藏,日后工作中参考. 线程与JVM调优专题:设计模式调优-性能设计沉思 ...
- 设计模式调优-性能设计沉思录(10)
JAVA调优系列文章 JVM调优全面探讨-性能设计沉思录(1)_luozhonghua2000的博客-CSDN博客 JVM GC回收和内存分配优化-性能设计沉思录(2)_luozhonghua2000 ...
- JVM调优全面探讨-性能设计沉思录(1)
为什么要jvm gc可能是java程序猿或非java程序猿讨论最多的话题,到底怎么回事? 本篇内容:内存管理发展史,JVM内存管理分析和实践(基础知识),JVM8调优(内存运行原理和编译优化) :2 ...
- 科技,美学,人性——交互设计的十字路口
交互设计沉思录 好久没有正儿八经写笔记了,翻完两遍<交互设计沉思录>,还是云里雾里,不得不借助敲键盘来整理一下思路. 这是一本探讨理论的书.这类书很难写,读者一般在读的过程中频频点头认同作 ...
- 迪克森沉思录之做Global SAP项目的弊端
迪克森沉思录之做Global SAP项目的弊端 笔者在过去的十年里,参与过好几个大型跨国企业在国内工厂的SAP推广实施项目,这种项目就是将总部设计好的全球模板推广到其海外工厂,使得其诸多海外工厂能按照 ...
- PHP沉思录-第三篇-Smarty-左轻侯-《程序员》2007年10月号
为什么80%的码农都做不了架构师?>>> 创建时间:2007-10-31 21:23:11 最后修改时间:2007-10-31 21:23:11 PHP沉思录之三:Smar ...
- ASP.NET Core 沉思录 - 结构化日志
在 <ASP.NET Core 沉思录 - Logging 的两种介入方法>中我们介绍了 ASP.NET Core 中日志的基本设计结构.这一次我们来观察日志记录的格式,并进一步考虑如何在 ...
- 软件开发沉思录--ThoughtWorks文集
软件开发沉思录--ThoughtWorks文集 市场价 :¥39.00 会员价 : ¥29.25(75折) [原出版社] Pragmatic Bookshelf [作 者]ThoughtWorks公 ...
- 《C++沉思录 第2版》
内容简介: <C和C++经典著作•C++沉思录:Ruminations on C++>基于作者在知名技术杂志发表的技术文章.世界各地发表的演讲以及斯坦福大学的课程讲义整理.写作而成,融聚了 ...
- 读书笔记∣概率论沉思录 01
概率的解释基础分为两种,一是物理世界本身存在的随机性(客观概率),二是是我们由于信息不足而对事件发生可能性的度量(主观概率).基于此,形成了概率论的两大学派:频率论学派(传统数理统计学)和贝叶斯统计学 ...
最新文章
- 2021年4月16日 阿里供应链Java研发实习面试(二面)
- kali安装步骤失败 选择并安装软件_Pycharm2019.3.3软件安装步骤
- matlab对一行矩阵fft,MATLAB?fft命令
- linux下q和q 的区别,linux命令中q、wq、q!的区别
- 小程序开发代码_企业为什么要选择小程序定制开发?
- 解决go get下载包失败问题
- 单片机c语言曲普两只蝴蝶,51单片机蜂鸣器播放音乐代码(生日快乐 两只蝴蝶 祝你平安)...
- SaaS服务和个性化需求,就不能鱼和熊掌兼得吗?
- 【ANSYS命令流】为什么是命令流?
- Android应用切换皮肤功能实现
- 闲人闲谈ERP项目逸事——德国做SAP项目回忆
- Rstudio 更改工作路径和安装包的路径
- 我用源码搭建直播网站
- 计算机在我们的生活中越来越重要英语,职业高中高一下学期期末英语试题卷5(含答案)...
- 打印机无法连接0x000000709
- 【资讯】辉煌十载!BDTC 2017 中国大数据技术大会在京盛大召开
- 电影文件长长的文件名是这个意思
- LINUX-S3C2440-SJA1000驱动程序-笔记
- codeblocks:: frotran 调用dll(详细)
- Mac系统怎样管理第三方字体