C++标准程序库—自修教程与参考手册
基本信息
- 原书名:The C++ Standard Library
编辑推荐
C++标准程序库提供了一组通用类别(classes)和界面(interfaes),可大幅扩充C++核心语言。程序库本身无法不辩自明,为了完整运用其组件,并从其强大的威力中获得利益,你需要一份完善的资源,而非一份仅仅列出类别和函数的一般文件。
内容简介回到顶部↑
书籍
计算机书籍
C++ 标准程序库提供一组通用类别(classes)和接口(interfaces),可大幅扩充 C++ 核心语言。由于程序库本身并不容易,为了完整运用其组件并从其强大的威力中获得帮助,你需要一份完善的资源,而非一份仅仅陈列类和函数的普通文档。
《The C++ Standard Library》(中文版《C++ 标准程序库》)不仅对每一个程序库组件提供范围广泛的说明,也对繁杂的感念提供清楚明亮的解释,并描述高效运用这些组件时需要的实际编程细节,提出一个又一个的范例程序。
这本包含最新资料的完整书籍,反映出被 ANSI/ISO C++ 语言标准规格书纳入的 C++ 标准程序库的结构。更明确地说,本书将焦点放在标准模板库(Standard Template Library)身上,检验其中的容器(containers)、迭代器(iterators)、仿函数(functors)和算法(algorithms)。你还可以找到特殊容器、字符串(strings)、数值类别、国际化议题、IOStream。每一个组件都有深刻的呈现,包括其介绍、设计、运用实例、细部解说、陷阱、意想不到的危险,以及相关类别和函数的确切标记(signature)和定义。一份见解深刻的基础概念介绍和一个程序库综合鸟瞰,会对新手带来快速的提升。
《The C++ Standard Library》范围广泛、详细、可读性高、实用, 是值得你一再查阅的 C++ 宝贵资源。本书网站 http://www.josuttis.com/libbook,其中提供书中源码下载。
计算机书籍
C++ 标准程序库提供一组通用类别(classes)和接口(interfaces),可大幅扩充 C++ 核心语言。由于程序库本身并不容易,为了完整运用其组件并从其强大的威力中获得帮助,你需要一份完善的资源,而非一份仅仅陈列类和函数的普通文档。
《The C++ Standard Library》(中文版《C++ 标准程序库》)不仅对每一个程序库组件提供范围广泛的说明,也对繁杂的感念提供清楚明亮的解释,并描述高效运用这些组件时需要的实际编程细节,提出一个又一个的范例程序。
这本包含最新资料的完整书籍,反映出被 ANSI/ISO C++ 语言标准规格书纳入的 C++ 标准程序库的结构。更明确地说,本书将焦点放在标准模板库(Standard Template Library)身上,检验其中的容器(containers)、迭代器(iterators)、仿函数(functors)和算法(algorithms)。你还可以找到特殊容器、字符串(strings)、数值类别、国际化议题、IOStream。每一个组件都有深刻的呈现,包括其介绍、设计、运用实例、细部解说、陷阱、意想不到的危险,以及相关类别和函数的确切标记(signature)和定义。一份见解深刻的基础概念介绍和一个程序库综合鸟瞰,会对新手带来快速的提升。
《The C++ Standard Library》范围广泛、详细、可读性高、实用, 是值得你一再查阅的 C++ 宝贵资源。本书网站 http://www.josuttis.com/libbook,其中提供书中源码下载。
作译者回到顶部↑
目录回到顶部↑
目录
侯捷译序a
孟岩译序g
目录(contents) v
前言(preface) xvii
致谢(acknowledgments) xix
1 关于本书1
1.1 缘起1
1.2 阅读前的必要基础2
1.3 本书风格与结构2
1.4 如何阅读本书4
1.5 目前发展形式5
1.6 范例程序代码及额外信息5
1.7 回应5
2 c++ 及其标准程序库简介7
2.1 沿革7
2.2 新的语言特性9
2.2.1 templates(模板) 9
2.2.2 基本型别的显式初始化(explicit initialization) 14
2.2.3 异常处理(exception handling) 15
侯捷译序a
孟岩译序g
目录(contents) v
前言(preface) xvii
致谢(acknowledgments) xix
1 关于本书1
1.1 缘起1
1.2 阅读前的必要基础2
1.3 本书风格与结构2
1.4 如何阅读本书4
1.5 目前发展形式5
1.6 范例程序代码及额外信息5
1.7 回应5
2 c++ 及其标准程序库简介7
2.1 沿革7
2.2 新的语言特性9
2.2.1 templates(模板) 9
2.2.2 基本型别的显式初始化(explicit initialization) 14
2.2.3 异常处理(exception handling) 15
译者序回到顶部↑
巨细靡遗井然有序
(侯捷译序)
自从1998 年C++ Standard定案以后,C++ 程序库便有了大幅扩充。原先为大家所熟知、标准规格定案前蕴酿已久的STL(Standard Template Library,标准模板程序库),不再被单独对待,而是被纳入整个C++ 标准程序库(Standard Library)。同时,原有的程序库(如iostream)也根据泛型技术(generics)在内部上做了很大的修改。可以说,C++ Standard的发布对C++ 社群带来了翻天覆地的大变动— 不是来自语言本身,而是来自标准程序库。这个变动,影响C++ 程序编写风格至巨,C++之父Bjarne Stroustrup 并因此写了一篇文章:Learning Standard C++ as a New Language(载于C/C++ User's Journal, 1999/05)。
我个人于1998 年开始潜心研究泛型技术和STL,本书英文版《The C++ Standard Library》甫一出版便成为我学习C++ 标准程序库的最重要案头工具之一。小有心得之后,我写过数篇相关技术文章,从来离不开本书的影响和帮助。我曾经把STL(代表泛型技术目前最被广泛运用的一个成熟产品,也是C++ 标准程序库的绝大
成份)的学习比喻为三个阶段(或层次):
第一境界:熟用STL
第二境界:了解泛型技术的内涵与STL的学理乃至实作
第三境界:扩充STL
不论哪一个阶段,你都能够从本书获得不同程度的帮助。
第一阶段(对最大多数程序员有立竿见影之效),我们需要一本全面而详尽的教本,附带多量而设计良好的范例,带领我们认识十数个STL 容器(containers)、数十个STL算法(algorithms)、许许多多的迭代器(iteartors)、配接器(adapters)、仿函数(functors)…的各种特性和用途。这些为数繁多的组件必须经过良好的编排组织和索引,才能成就一本效果良好、富教育性又可供长久查阅的案头工具书。在这一阶段里,本书表现极为优异。书中运用许多图表,对所有STL组件的成员做了极其详尽的整理。更值得称道的是书中交叉参考(cross reference)做得非常好,在许多关键地点告诉读者当下可参见哪一章哪一节哪一页,对于阅读和学习带来很大的帮助(本中文版以页页对译方式保留了所有交叉参考和索引)。
第二阶段(从STL 的运用晋升至泛型技术的学习),我们需要一些关键的STL 源码(或伪码, pseudo code),帮助我们理解关键的数据结构、关键的编程技术。认识这些关键源码(或伪码)同时也有助提升第一阶段的运用深度(学会使用一样东西,却不知道它的道理,不高明.1)。
本书很多地方都提供了C++ 标准程序库的关键源码。不全面,但很关键。
第三阶段(成为一位泛型技术专家;打造自己的STL兼容组件),我们需要深入了解STL的设计理念和组织架构2,并深入(且全面地)了解STL实作手法3。是的,不入虎穴,不能得虎子;彻底了解STL 如何被打造出来之后,你才能写出和STL水乳交融、完美整合的自定组件(user-defined components)。
本书对第三阶段的学习也有相当帮助。虽然没能提供全面的STL源码并分析其技术(那需要另外800 页.),却提供了为数不少的订制型组件实作范例:p191, p213提供了一个执行期指定排序准则并运用不同排序准则的实例,p219 提供一个自定容器(虽然只是个简单的包覆类别),p222 提供一个“reference语意”示范作法, p285提供一个针对迭代器而设计的泛型算法,p288 提供一个用于关联式容器的订制型inserter,p294 有一个自定的排序准则,p441 有一个自定的(安全的)stack,p450有一个自定的(安全的)queue,p504 有一个自定的traits class for string, p614 有一个自定的stream操控器,p663 有一个自定的stream缓冲区,p735 有一个自定的内存配置器(allocator)。
1 乍见之下令人错愕的一句话。看电视需要先了解电视的原理吗?呵呵,话讲白就没意思了。这句话当然是对技术人员说的。
2 这方面我推荐你看《Generic Programming and the STL - Using and Extending the C++ Standard Template Library》, by Matthew H. Austern, Addison Wesley 1998。详见稍后说明。中译本《泛型程序设计与STL》,侯捷/黄俊尧合译, 碁峰, 2001。
3 这方面我推荐你看《STL源码剖析, The Annotated STL Sources》by 侯捷, 碁峰, 2002。详见稍后说明。
除了众所瞩目的STL,本书也涵盖一般不被归类为STL的String程序库,以及一般不被视为关键的IOStream 和Locale 程序库4。三部分互有关连,以IOStream 为主干。在GUI(图形使用接口)和application framework(应用程序框架)当道的今天,IOStream提供的输出输入可能对大部份人失去了价值,但如果你希望开拓技术视野,IOStream 是一颗沉睡的珠宝。
泛型技术不仅在C++ 被发扬光大,在Java 上也有发展5,在C# 上亦被众人期待。从目前的势头看,泛型技术(Generics)或许是面向对象(Object Oriented)技术以来程序编写方面的又一个巨大冲击。新一代C++ 标准程序库6将采用更多更复杂更具威力的泛型技术,提供给C++ 社群更多更好更具复用价值的组件。不论你要不要、想不想、有没有兴趣在你的程序编写过程中直接用上泛型技术,至少,在C++ 程序编写过程中你已经不可或缺于泛型技术带来的成熟产品:C++ 标准程序库。只要你具备C++ 语言基础,本书便可以带领你漂亮地运用C++ 标准程序库,漂亮地提升你的编程效率和程序品质。
面对陌生,程序员最大的障碍在于心中的怯弱。To be or not to be, that is the question!不要像哈姆雷特一样犹豫不决。面对光明的技术,必须果敢。
(侯捷译序)
自从1998 年C++ Standard定案以后,C++ 程序库便有了大幅扩充。原先为大家所熟知、标准规格定案前蕴酿已久的STL(Standard Template Library,标准模板程序库),不再被单独对待,而是被纳入整个C++ 标准程序库(Standard Library)。同时,原有的程序库(如iostream)也根据泛型技术(generics)在内部上做了很大的修改。可以说,C++ Standard的发布对C++ 社群带来了翻天覆地的大变动— 不是来自语言本身,而是来自标准程序库。这个变动,影响C++ 程序编写风格至巨,C++之父Bjarne Stroustrup 并因此写了一篇文章:Learning Standard C++ as a New Language(载于C/C++ User's Journal, 1999/05)。
我个人于1998 年开始潜心研究泛型技术和STL,本书英文版《The C++ Standard Library》甫一出版便成为我学习C++ 标准程序库的最重要案头工具之一。小有心得之后,我写过数篇相关技术文章,从来离不开本书的影响和帮助。我曾经把STL(代表泛型技术目前最被广泛运用的一个成熟产品,也是C++ 标准程序库的绝大
成份)的学习比喻为三个阶段(或层次):
第一境界:熟用STL
第二境界:了解泛型技术的内涵与STL的学理乃至实作
第三境界:扩充STL
不论哪一个阶段,你都能够从本书获得不同程度的帮助。
第一阶段(对最大多数程序员有立竿见影之效),我们需要一本全面而详尽的教本,附带多量而设计良好的范例,带领我们认识十数个STL 容器(containers)、数十个STL算法(algorithms)、许许多多的迭代器(iteartors)、配接器(adapters)、仿函数(functors)…的各种特性和用途。这些为数繁多的组件必须经过良好的编排组织和索引,才能成就一本效果良好、富教育性又可供长久查阅的案头工具书。在这一阶段里,本书表现极为优异。书中运用许多图表,对所有STL组件的成员做了极其详尽的整理。更值得称道的是书中交叉参考(cross reference)做得非常好,在许多关键地点告诉读者当下可参见哪一章哪一节哪一页,对于阅读和学习带来很大的帮助(本中文版以页页对译方式保留了所有交叉参考和索引)。
第二阶段(从STL 的运用晋升至泛型技术的学习),我们需要一些关键的STL 源码(或伪码, pseudo code),帮助我们理解关键的数据结构、关键的编程技术。认识这些关键源码(或伪码)同时也有助提升第一阶段的运用深度(学会使用一样东西,却不知道它的道理,不高明.1)。
本书很多地方都提供了C++ 标准程序库的关键源码。不全面,但很关键。
第三阶段(成为一位泛型技术专家;打造自己的STL兼容组件),我们需要深入了解STL的设计理念和组织架构2,并深入(且全面地)了解STL实作手法3。是的,不入虎穴,不能得虎子;彻底了解STL 如何被打造出来之后,你才能写出和STL水乳交融、完美整合的自定组件(user-defined components)。
本书对第三阶段的学习也有相当帮助。虽然没能提供全面的STL源码并分析其技术(那需要另外800 页.),却提供了为数不少的订制型组件实作范例:p191, p213提供了一个执行期指定排序准则并运用不同排序准则的实例,p219 提供一个自定容器(虽然只是个简单的包覆类别),p222 提供一个“reference语意”示范作法, p285提供一个针对迭代器而设计的泛型算法,p288 提供一个用于关联式容器的订制型inserter,p294 有一个自定的排序准则,p441 有一个自定的(安全的)stack,p450有一个自定的(安全的)queue,p504 有一个自定的traits class for string, p614 有一个自定的stream操控器,p663 有一个自定的stream缓冲区,p735 有一个自定的内存配置器(allocator)。
1 乍见之下令人错愕的一句话。看电视需要先了解电视的原理吗?呵呵,话讲白就没意思了。这句话当然是对技术人员说的。
2 这方面我推荐你看《Generic Programming and the STL - Using and Extending the C++ Standard Template Library》, by Matthew H. Austern, Addison Wesley 1998。详见稍后说明。中译本《泛型程序设计与STL》,侯捷/黄俊尧合译, 碁峰, 2001。
3 这方面我推荐你看《STL源码剖析, The Annotated STL Sources》by 侯捷, 碁峰, 2002。详见稍后说明。
除了众所瞩目的STL,本书也涵盖一般不被归类为STL的String程序库,以及一般不被视为关键的IOStream 和Locale 程序库4。三部分互有关连,以IOStream 为主干。在GUI(图形使用接口)和application framework(应用程序框架)当道的今天,IOStream提供的输出输入可能对大部份人失去了价值,但如果你希望开拓技术视野,IOStream 是一颗沉睡的珠宝。
泛型技术不仅在C++ 被发扬光大,在Java 上也有发展5,在C# 上亦被众人期待。从目前的势头看,泛型技术(Generics)或许是面向对象(Object Oriented)技术以来程序编写方面的又一个巨大冲击。新一代C++ 标准程序库6将采用更多更复杂更具威力的泛型技术,提供给C++ 社群更多更好更具复用价值的组件。不论你要不要、想不想、有没有兴趣在你的程序编写过程中直接用上泛型技术,至少,在C++ 程序编写过程中你已经不可或缺于泛型技术带来的成熟产品:C++ 标准程序库。只要你具备C++ 语言基础,本书便可以带领你漂亮地运用C++ 标准程序库,漂亮地提升你的编程效率和程序品质。
面对陌生,程序员最大的障碍在于心中的怯弱。To be or not to be, that is the question!不要像哈姆雷特一样犹豫不决。面对光明的技术,必须果敢。








点击看大图







加载中...

