Effective STL中文版 译序
《Effective STL中文版》译序
就像本书的前两本姊妹作(Effective C++、More Effective C++)一样,本书的侧重点仍然在于提升读者的经验,只不过这次将焦点瞄准了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中文版 译序的更多相关文章
- 容器使用的12条军规——《Effective+STL中文版》试读
容器使用的12条军规——<Effective+STL中文版>试读 还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...
- 《Effective STL中文版》前言
<Effective STL中文版>前言 我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...
- Effective STL 中文版(大全)
Effective STL 中文版(大全) 作者:winter 候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL.Effective STL是一本非常好的书, ...
- Effective C#中文版
我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...
- [置顶] Effective STL 学习笔记
看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. ...
- C++之Effective STL
今天看了下websocket的知识,了解到这是html5新增的特性,主要用于实时web的通信.之前客户端获取服务端的数据,是通过客户端发出请求,服务端进行响应的模式,或者通过ajax每隔一段时间从后台 ...
- 《Effective Java中文版第二版》读书笔记
说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个 ...
- Effective STL 读书笔记
Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...
- Effective STL读书笔记
Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...
随机推荐
- node.js 基础学习笔记1
1. node -v 查看版本 node -e --js代码 node --进入编辑模式 Ctrl+C 退出编译模式 var http=require('http') http.createServe ...
- const in C++
const关键字是C++中常用的类型修饰符,用法非常灵活,使用const将大大改善程序的健壮性. const的作用 1. 定义const常量: 比如: const int Max = 100; 2. ...
- 咏南IOCP中间件
咏南IOCP中间件 特大好消息,咏南中间件系列新增加——咏南IOCP中间件.咏南IOCP中间件完全兼容咏南DATASNAP中间件的远程方法接口. 中间件DELPHI7~DELPHI XE10.1.1都 ...
- 今天想用jquery来实现div的拖放功能
html5标签.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 步骤一:首先设置标签可以被拖 draggable="true" 步骤二:选取被拖的标签,和要放置被拖 ...
- FreeBSD_11-系统管理——{Part_0-基础}
Tips: sysctl -d kern.maxvnodes #查看系统控制选项的含义 true > file #清空文件内容 alias ls 'ls -I(大写i)' #取消 root 的 ...
- 文件过滤器 filter
OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...
- jQuery in action 3rd - Operating on a jQuery collection
1.创建新 DOM 元素 $('<div>Hello</div>'); $('<img>', { src: 'images/little.bear.png', al ...
- XproerIM产品使用手册
1. 产品介绍 版权所有:(c)2009-2016 荆门泽优软件有限公司 保留所有权利. 产品官网:http://www.ncmem.com/apps/xproerim/index.asp 安装 ...
- python基础整理笔记(三)
一. python的几种入参形式:1.普通参数: 普通参数就是最一般的参数传递形式.函数定义处会定义需要的形参,然后函数调用处,需要与形参一一对应地传入实参. 示例: def f(a, b): pri ...
- [f]动态判断js加载完成
在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析.这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内 ...