《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中文版 译序的更多相关文章

  1. 容器使用的12条军规——《Effective+STL中文版》试读

    容器使用的12条军规——<Effective+STL中文版>试读     还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...

  2. 《Effective STL中文版》前言

    <Effective STL中文版>前言     我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...

  3. Effective STL 中文版(大全)

    Effective STL 中文版(大全) 作者:winter 候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL.Effective STL是一本非常好的书, ...

  4. Effective C#中文版

    我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...

  5. [置顶] Effective STL 学习笔记

    看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. ...

  6. C++之Effective STL

    今天看了下websocket的知识,了解到这是html5新增的特性,主要用于实时web的通信.之前客户端获取服务端的数据,是通过客户端发出请求,服务端进行响应的模式,或者通过ajax每隔一段时间从后台 ...

  7. 《Effective Java中文版第二版》读书笔记

    说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个 ...

  8. Effective STL 读书笔记

    Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...

  9. Effective STL读书笔记

    Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...

随机推荐

  1. Python_sklearn机器学习库学习笔记(一)_一元回归

    一.引入相关库 %matplotlib inline import matplotlib.pyplot as plt from matplotlib.font_manager import FontP ...

  2. return exit _exit

    (1)进程终止: C程序的终止分为两种:正常终止和异常终止. 正常终止分为: return, exit, _exit, _Exit, pthreade_exit. 异常中指分为: abort, SIG ...

  3. DUILIB CDialogBuilder 使用问题

    频繁调用CDialogBuilder的create接口创建同一个配置文件,会报异常: 正常的处理方式如下: if (!m_dlgBuilder.GetMarkup()->IsValid()) { ...

  4. 問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派

    這是在實作當前專案最後一個關鍵功能:提醒通知 所遇到的奇怪狀況 目前的設想,是以 Windows Form 結合 Timer,當作發送通知的載體 大家都知道在 C# 的環境裡,有三種內建的 Timer ...

  5. 自动化测试工具QTP和SilkTest横向PK(转)

    转自:http://www.uml.org.cn/Test/201405212.asp?artid=1686 众所周知,自动化测试工具曾几何时三足鼎立,Mercury QTP/WinRunner系.I ...

  6. VS经常报错的link error 2019

    VS经常报错的link error 2019 原因如下: 可能是找得到头文件,但是相关的dll或者lib找不到,需要在配置里面添加相应的库文件. project=>configuration.. ...

  7. [VBS脚本]定时提示并关闭计算机

    一.Natalia.bat 双击这个文件可以运行Natalia 控制台在打开后会变成最小化,标题为PowerAssistant,黑色背景淡绿色文字 运行脚本Natalia.vbs @ECHO OFF ...

  8. React Native填坑之旅--动画

    动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...

  9. Meta标签以及viewport

    meta是meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和http-equiv. name属性主要作用:对应 ...

  10. JS判断手机访问跳转到手机站

    这里提供了六种让手机端访问网站跳转到手机端的方法: 第一种: <script> if(navigator.platform.indexOf('Win32')!=-1){ //pc //wi ...