C++标准库—自学教程与参考手册(第2版)之第一章 关于这本书

来源:互联网 发布:什么软件容易画电路图 编辑:程序博客网 时间:2024/05/01 07:03

1.1 为什么选择此书

C++推出后不久,便成为了面向对象编程领域事实上的标准。这就导致了标准化的目标。只要有一个统一的标准,所写的程序将能够运行在不同的平台—从普通PC到大型主机。而且,一个标准库能够使程序员使用通用组件和高级抽象层次,而不是必须得重新开发所有代码,并且容易移植。

现在,第二个标准,叫做C++11(见第2.1节,第7页,详细地讲述了C++标准的历史),我们有一个巨大C++标准库,它的规范要多于核心语言特征的2倍。这个库使我们能够使用

  • 输入/输出(I/O)类

  • 字符串类型和正则表达式

  • 各种数据结构,如动态数组,链表,二叉树和哈希表

  • 各种算法,如多种多样的排序算法

  • 多线程类和并发类

  • 国际化支持类

  • 数字类

  • 大量的工具

然而,库并不是不需加以说明的。为了使用这些组件并从标准库中受益,你需要一个介绍,用来说明一些概念和重要的细节,而不是简单地列出一些类和函数。这本书正是用于这个目的。首先,它介绍了标准库和从概念角度来看的组件。其次,此书描述了实际编程中遇到的细节,并且包含了一些例子去准确演示这些组件的使用。因此,这本书一本十分详细的C++标准库的学习手册,无论初学者还是有经验的程序员。学完此书后,你就可以很好地使用C++标准库 了。

警告:我并没有承诺被描述的所有知识都是简单和自明的。标准库提供了许多的灵活性,但是重要目的的灵活性是有代价的。标准库存在一些陷阱和缺陷,当我们遇到它们的时候,我会指出来并提供几种避免他们发生的方式。

1.2 阅读这本书之前

为了更好地学习这本书,你应该已经了解C++。(这本书描述的是C++的标准组件而不是语言本身)你应该熟悉类,继承,模版,异常处理,和命名空间等概念。然而,你并不需要知道所有关于语言的次要细节。这本书描述了一些重要的细节;关于语言的细节,对于想要实现标准库而不是去使用它的人来说更重要。

要注意到在C++11标准中语言发生了一些变化,正如它在C++98中发生的 一样,所以你的知识也许不是最新的。第三章提供了对于使用C++11标准库很重要的最新的语言特征的简要的概述。许多新的标准库特征使用这些新的语言特征,所以 你应该阅读第三章,复习一下C++所有的新特征。但是我也将参考这个章节,当标准库使用新的语言特征的时候。

1.3 这本书的风格和结构

C++标准库提供的组件,它们有些但并不完全独立于彼此,所以并没有一种容易的方式,使我们描述每一个部分的时候而不用提及其它部分。我考虑过各种各种的方法来呈现这本书的内容。其中一种就是按照C++标准的顺序。然而,从头开始来解释C++标准库的组件并不是一个最好的方式。另一个方法就是以所有组件的概述开始,然后就是提供更多细节的章节。又或者,我可以将组件进行分类,试着去找到一个对其它部分最低限度的交叉引用的这样一个顺序。最终我的解决方案是这三种方法的综合。我以对一般概念和使用标准库的实用工具的简要介绍开始,然后,每一个组件都以一个章节或者更多章节来描述。第一个组件是标准模版库(STL)。毫无疑问,STL是标准库中最强大,最复杂和最令人兴奋的一部分。它的设计很大程度上影响了其它组件。然后,我描述了更多的不言自明的组件,如一些特殊的容器,字符串,正则表达式。下一个要讨论的组件,你可能已经知道并且使用过了:IOStream库。紧接着是国际化对IOStream库的一些影响。最后,我描述了标准库中处理数字,并发,和内存分配的部分。

每一个组件的描述都以组件的目的,设计和一些例子开始,接下来,就是使用组件的各种方式的详细描述和与它相关的一些陷阱和缺陷。描述经常以一个这样一个引用章节结束,它使你能够找到组件类和它的函数的准确签名和定义。

内容列表

前五章大体上介绍了这本书和C++标准库:

  • 第1章:关于这本书 介绍了这本书的主题和并描述了它的内容。

  • 第2章:C++和标准库的入门 简要概述了C++标准库的历史和它标准化的背景并介绍了复杂度的概念。

  • 第3章: 语言的新特征 概述了你读这本书和使用C++标准库需要知道的新语言特征。

  • 第4章: 一般概念 描述了你需要理解的基本库的概念,便于与所有组件一起使用。特别地,这章引进了命名空间std,头文件的格式以及错误和异常处理的大部分支持。

  • 第5章: 实用工具 描述了一些为那些使用库和库本身的使用者提供的小工具。特别地,这个章节描述了类pair<>和tuple<>,智能指针,数字限制,类型特性,辅助函数,类ratio<>,时钟,定时器和可用的C函数。

第6章到第11章描述了STL的方方面面:

  • 第6章: 标准模版库 呈现了STL概念的详细介绍,它提供了用来处理数据集合的容器类和算法。这一章逐步地解释了一些概念,问题,和一些特殊的STL编程技巧,以及各部分的作用。

  • 第7章: STL容器 解释了容器的概念和描述了STL容器类的用法。这一章从他们公共的用法、不同之处、具体的好处和缺点方面描述了array,vector,deque,list,forward list,set,map和无序的容器并提供了典型的例子。

  • 第8章: 深入STL容器成员 以一种方便参考的方式列出并描述了所有的容器成员(类型和操作)。

  • 第9章: STL迭代器 解释了各种各样的迭代器范围,用于迭代器的辅助函数和迭代器适配器,如流迭代器,反向迭代器,插入迭代器和移动迭代器。

  • 第10章: STL函数对象和Lambda的使用 详述了函数对象类,包括lambda,以及如何使用它们来定义容器和算法的行为。

  • 第11章: STL算法 列出并描述了STL的算法。简要的介绍和比较了算法后,每一种算法都被详细描述,然后用一个或者更多的示例程序来说明。

第12章到第14章描述了“简单的”C++标准库中的个别标准类:

  • 第12章: 特殊的容器 描述了queue和stack以及类bitset的容器适配器,bitset管理一个任意数目的位或者标志的位域。

  • 第13章: 字符串 描述了C++标准库的字符串类型(是的,有不只一种)。标准库赋予了这些字符串类型像“kind of”基本数据类型的能力去使用不同的字符类型。

  • 第14章: 正则表达式 描述了处理正则表达式的接口,我们可以用它来搜索或者替换字符和子字符串。

第15章和第16章解决I/O和国际化这两个紧密相连的主题:

  • 第15章: 使用流类来输入/输出 不仅覆盖了都知道的IOStream类的标准化形式,还详述了不是那么被人知道的却可能对程序员很重要的一些细节,例如定义和集成特殊的I/O通道。

  • 第16章: 国际化 包括程序国际化的一些概念和类,例如不同字符集的处理,浮点型数字和日期等不同格式的使用。

剩余的章节包括数值,并发和内存分配:

  • 第17章: 数值 描述了C++标准库中的数值组件:特别地,随机数和分布类,复数类和一些数值相关的C函数。

  • 第18章: 并发 描述了C++标准库中提供一些特征,使程序能够 并支持并发和多线程。

  • 第19章: 内存分配 描述了C++标准库中不同内存模型的概念。

这本书以参考目录和索引结束。

由于书体积大小的因素,我不得不将一些对于平均水平程序员来说不是那么相关但是又必须涉及到的资料移到了补充章节,它可以在此书网站:http://www.cppstdlib.com

找到。其中包括:

  • bitset的详述(第12.5章节中有介绍)

  • 类valarray<>(第17.4中有非常简单的介绍)

  • 内存分配的细节(第19章有介绍)

1.4 如何阅读这本书

这本书既是一个用户使用指南,又是一个关于C++标准库的结构化的参考指南。C++标准库中个别的组件是有些独立于其它组件的,所以当你阅读了第2章到第5章后,你可以以任意顺序阅读那些讨论个别组件的章节。务必记住第6章到第11章都是在描述同一个组件。为了理解其它STL章节,你必须从第6章STL入门开始。

如果你是一个C++程序员,想要大体上知道标准库中的概念和所有部分,你应该简单地从头读到尾。然而,你应该跳过参考章节。为了使用C++标准库中确定的组件进行编程,找到它们的最好方式就是使用全面足够的索引,让你在寻找时能够节约大部分时间。

以我的经验来看,最好的学习方式就是看例子。因此,在整本书中,你将看到许多的例子。它们也许只是一段代码,又或者是完整的程序。后一种情况下,你将在程序的第一行注释发现包含该程序的文件名。你可以在这本书的网址http://www.cppstdlib.com里找到这些文件。

1.5  知识水平

当我写正在写这本书的时候,C++11标准已经完成了。请记住:一些编译器可能不支持这些标准。不过很有可能在不久的将来发生改变。作为一种结果,你 可能发现这本书中所覆盖的所有知识并不都会在你的系统中正常运行,所以你必须得根据你具体的环境对示例程序做出改变。

1.6 示例代码和更多信息

你可以在我的网站http://www.cppstdlib.com里得到所有 例子的源码并能够获取更多关于这本书和C++标准库的 信息。而且,在因特网上,你能发现许多关于这个话题的额外信息。在这个网站里,你也可以找到参考书目中提及的一些书籍。

1.7 反馈

我非常欢迎你们对这本书的反馈(好的和坏的)。我试着去仔细准备;然而,我只是一个人,在某些时候,我不得不停止写作和调整。所以,你也许会发现一些错误,不一致,或者能够被描述的更好的一些主题。你们的反馈将给我在后续版本后进行改善的机会。

接触我的最好方式就是email了。然而,为了 避免垃圾邮件,我并没有在这本书中包含我的email地址。(当我每天收到成千上万的垃圾邮件时,我不得不停止使用我在第一版中包含的邮箱地址。)请查阅这本书的网址http://www.cppstdlib.com去获取可以进行反馈的email地址。

非常感谢。


0 0
原创粉丝点击