本书着重讨论了C++类和算法组件的各个方面。在每方面,除了介绍一些基础知识外,还提供了大量的示例程序,以指导读者学习使用功能强大的类库。需要集成Java程序和C++程序的Java程序员将在本书中找到标准C++类、类属性、类方法的完整描述和详细文档资料。\r\n 本书条理清晰,语言简练,适用于初学者和高级程序设计人员。
第一章 C++类库概述 \r\n\r\n1.1 C++标准类库:功能视图 \r\n1.1.1 面向对象的输入/输出 \r\n1.1.2 容器类和ADT(抽象数据类型) \r\n1.1.3 重要的新ADT(抽象数据类型) \r\n1.1.4 存储管理类 \r\n1.2 标准C++类库的结构视图 \r\n1.2.1 什么是标准面向对象程序设计方法 \r\n1.2.2 通用性 \r\n1.2.3 面向对象的程序设计方法和生成式程序设计方法 \r\n1.2.4 接口视图 \r\n1.3 C++语言与标准软件设计(lego) \r\n\r\n第二章 类的内部结构(Anatomy) \r\n\r\n2.1 标准C++类库类 \r\n2.1.1 具体类 \r\n2.1.2 抽象类 \r\n2.1.3 接口(适配子)类 \r\n2.1.4 节点类 \r\n2.1.5 支持/实用类 \r\n2.1.6 迭代子类 \r\n2.1.7 分配器类 \r\n2.1.8 参数化(模板)类 \r\n2.1.9 领域类 \r\n2.2 属性(attribute)、特性(characteristic)和方法(method)\r\n2.2.1 私有方式 \r\n2.2.2 只有成员可以访问 \r\n2.2.3 对公共开放 \r\n2.3 小结 \r\n\r\n第三章 IO流(iostreams) \r\n\r\n3.1 类和IO流 \r\n3.1.1 流状态组件 \r\n3.1.2 缓冲组件 \r\n3.1.3 转换组件 \r\n3.1.4 流状态类ios_base T 和basic_ios T \r\n3.1.5 缓冲类basic_streambuf, basic_filebuf, basic_stringbuf \r\n3.1.6 转换类basic_istream 和 basic_ostream \r\n3.2 面向对象的输入/输出 \r\n3.2.1 抽取符(extractors) \r\n3.2.2 cout,wcout和inserters \r\n3.3 IO流类层次结构 \r\n3.4 IO流类型定义(typedefs) \r\n3.4.1 basic_streambuf类 \r\n3.5 最基本的基类ios_base \r\n3.5.1 构造basic_ios(ios)对象 \r\n3.5.2 打开(open)模式 \r\n3.5.3 ios类的缓冲组件 \r\n3.5.4 ios类的缓冲状态组件 \r\n3.5.5 ios 类的格式状态(format state)组件 \r\n3.6 一个面向对象的输入模型 \r\n3.6.1 构造一个istream对象 \r\n3.6.2 istream访问函数:流抽取和对象转化 \r\n3.6.3 抽取运算符 \r\n3.6.4 抽取转化(translation)和换算(conversion) \r\n3.6.5 非格式化抽取 \r\n3.6.6 岗哨(sentry)对象及ipfx()、isfx()前缀和后缀方法 \r\n3.7 一个面向对象的输出模式类basic_ostream \r\n3.7.1 一个ostream对象的构造 \r\n3.7.2 插入运算符 \r\n3.7.3 插入转化和换算 \r\n3.7.4 basic_ostream类访问函数 \r\n3.7.5 类iostream = basic_istream + basic_ostream \r\n3.7.6 岗哨(sentry)对象及opfx()、osfx()前缀和后缀方法 \r\n3.8 类ifstream \r\n3.8.1 构造ifstream对象 \r\n3.8.2 访问ifstream类缓冲的方法 \r\n3.8.3 使用ifstream对象 \r\n3.8.4 面向对象输出文件的oftream类 \r\n3.8.5 构造ofstream对象 \r\n3.8.6 访问ofstream类缓冲的方法 \r\n3.8.7 类fstream = ifstream + ofstream \r\n3.9 文件 \r\n3.9.1 打开和关闭文件 \r\n3.9.2 写文本文件 \r\n3.9.3 读文本文件 \r\n3.9.4 写二进制文件 \r\n3.9.5 读二进制文件 \r\n3.9.6 对二进制文件进行对象的读写 \r\n3.9.7 类istringstream(内存设备) \r\n3.9.8 构造istringstream对象 \r\n3.9.9 类ostringstream \r\n3.9.10 类stringstream = istringstream + ostringstream \r\n3.10 控制器(manipulators) \r\n3.10.1 换行(new-line)控制器endl \r\n3.10.2 空(null)控制器ends \r\n3.10.3 刷新流 \r\n3.10.4 数字格式化控制器 \r\n3.10.5 跳过空白区(white spaces) \r\n3.10.6 标志控制器 \r\n3.10.7 填补(padding)和填充(fill)控制器 \r\n3.11 小结 \r\n\r\n第四章 串(string)类 \r\n\r\n4.1 串的概念 \r\n4.1.1 串的表示 \r\n4.1.2 串类 \r\n4.2 基本串类 \r\n4.2.1 基本串类模板参数 \r\n4.2.2 串类服务 \r\n4.2.3 串对象的构造 \r\n4.2.4 用子串构造串对象 \r\n4.2.5 串分配 \r\n4.2.6 访问串数据组件 \r\n4.2.7 访问字符序列 \r\n4.2.8 访问子串 \r\n4.2.9 访问有关串对象的信息 \r\n4.2.10 串对象的内存管理 \r\n4.2.11 拷贝(copying)和交换(swapping) \r\n4.2.12 异常处理 \r\n4.3 串类的扩展 \r\n4.4 小结 \r\n\r\n第五章 异常(exception)类 \r\n\r\n5.1 什么是软件错误(Sofeware Error) \r\n5.1.1 软件规范(Specifications) \r\n5.2 软件失败和异常 \r\n5.3 测试(testing)、调试(debugging)和异常处理定义 \r\n5.3.1 错误处理的一般方法 \r\n5.4 异常类层次结构 \r\n5.4.1 logic_error类 \r\n5.4.2 runtime_error 类 \r\n5.4.3 为异常类族分类 \r\n5.4.4 构造异常类 \r\n5.4.5 析构异常类 \r\n5.4.6 赋值和异常类 \r\n5.5 使用异常类 \r\n5.5.1 管理异常类 \r\n5.5.2 具体化(specializing)异常类 \r\n5.6 处理异常 \r\n5.6.1 重执模式 \r\n5.6.2 终止模式 \r\n5.7 小结 \r\n\r\n第六章 Runtime Type Information类 \r\n\r\n6.1 运行类型信息 \r\n6.1.1 type_info 类 \r\n6.1.2 bad_typeid 类 \r\n6.1.3 动态强制转换(casting)和bad_cast类 \r\n6.2 小结 \r\n\r\n第七章 标准C++容器 \r\n\r\n7.1 什么是容器 \r\n7.1.1 容器类体系结构 \r\n7.2 顺序存储对象 \r\n7.2.1 容器和接口视图 \r\n7.2.2 所有容器公用的通用方法和运算符 \r\n7.2.3 所有顺序容器公用的通用方法 \r\n7.2.4 所有联合容器公用的通用方法 \r\n7.3 容器和自动存储管理 \r\n7.4 使用顺序容器 \r\n7.4.1 顺序容器的接口协议 \r\n7.4.2 构造顺序容器 \r\n7.4.3 顺序容器和动态分配 \r\n7.4.4 析构顺序容器 \r\n7.4.5 顺序插入修改方法 \r\n7.4.6 顺序删除修改方法 \r\n7.4.7 其他顺序容器访问方法 \r\n7.4.8 顺序容器迭代访问方法 \r\n7.5 面向对象向量 \r\n7.5.1 为什么向量是很有用的 \r\n7.5.2 构造一个向量 \r\n7.5.3 析构一个向量 \r\n7.5.4 访问向量信息 \r\n7.5.5 使用修改方法向向量放置对象 \r\n7.5.6 从容器中移走对象 \r\n7.5.7 从向量访问对象 \r\n7.5.8 向量类型的关系操作 \r\n7.6 双端队列 \r\n7.6.1 面向对象的队列、优先队列和双端队列 \r\n7.6.2 标准双端队列 \r\n7.6.3 构造双端队列 \r\n7.6.4 访问双端队列信息 \r\n7.6.5 使用修改方法来向双端队列插入对象 \r\n7.6.6 双端队列对象访问方法 \r\n7.7 容器类库适配子(adaptor) \r\n7.7.1 什么是适配子 \r\n7.8 面向对象的堆栈 \r\n7.8.1 标准堆栈 \r\n7.9 标准队列 \r\n7.9.1 优先队列 \r\n7.10 联合容器 \r\n7.10.1 使用联合容器 \r\n7.10.2 标准联合容器的构造函数和析构函数 \r\n7.10.3 联合容器的插入修改方法 \r\n7.10.4 联合容器的删除修改方法 \r\n7.10.5 联合容器的迭代子访问方法 \r\n7.11 集合容器 \r\n7.11.1 集合从属关系 \r\n7.11.2 通用集合对象类型 \r\n7.12 什么是面向对象的集合 \r\n7.12.1 集合的逻辑表示和实现 \r\n7.13 标准集合容器 \r\n7.13.1 对于内置类型的客户职责 \r\n7.13.2 对于用户定义类型的客户职责 \r\n7.13.3 集合的构造函数 \r\n7.13.4 集合的析构函数 \r\n7.13.5 集合容器信息的访问 \r\n7.14 标准多重集容器 \r\n7.14.1 多重集的插入修改方法 \r\n7.14.2 多重集的insert()修改方法 \r\n7.14.3 多重集的erase()修改方法 \r\n7.14.4 多重集的访问方法 \r\n7.14.5 多重集的运算符 \r\n7.15 关系、映像和多重映像 \r\n7.15.1 映像容器 \r\n7.15.2 标准映像容器 \r\n7.15.3 映像的构造函数 \r\n7.15.4 映像的析构函数 \r\n7.15.5 映像的信息访问方法 \r\n7.15.6 映像的插入修改方法 \r\n7.15.7 erase()修改方法 \r\n7.15.8 映像对象的访问方法 \r\n7.16 映像容器的运算符和操作 \r\n7.17 多重映像容器类 \r\n7.17.1 标准多重映像容器 \r\n7.17.2 多重映像的构造函数 \r\n7.17.3 多重映像的析构函数 \r\n7.17.4 多重映像容器的信息访问方法 \r\n7.17.5 多重映像容器的修改方法 \r\n7.17.6 多重映像容器的其他访问方法 \r\n7.18 多重映像容器的运算符和操作 \r\n7.19 小结 \r\n\r\n第八章 迭代子 \r\n\r\n8.1 迭代子处理:顺序和直接访问 \r\n8.2 使用标准C++库迭代子 \r\n8.2.1 迭代子分类 \r\n8.3 迭代子和容器类 \r\n8.3.1 恒定和可变的迭代子 \r\n8.4 迭代子适配器 \r\n8.5 预定义的迭代子类 \r\n8.5.1 迭代子特性和迭代子类 \r\n8.5.2 流和流缓冲区迭代子 \r\n8.5.3 插入迭代子 \r\n8.5.4 反向迭代子 \r\n8.5.5 全局方法advance()和distance() \r\n8.6 小结 \r\n\r\n第九章 算法库 \r\n\r\n9.1 什么是算法(Algorithms) \r\n9.2 算法的重要性 \r\n9.3 算法的通用性 \r\n9.4 C++标准算法 \r\n9.4.1 算法的参数 \r\n9.5 查找算法 \r\n9.5.1 顺序查找法 \r\n9.5.2 对分查找 \r\n9.5.3 查找用户自定义的对象 \r\n9.6 排序算法 \r\n9.6.1 排序特征 \r\n9.6.2 空间需求 \r\n9.6.3 排序的稳定性 \r\n9.6.4 标准类库排序的分类 \r\n9.6.5 排序算法的使用 \r\n9.7 集合算法 \r\n9.7.1 集合操作 \r\n9.8 容器管理算法 \r\n9.9 算法设计的考虑 \r\n9.9.1 所有算法的5种需要 \r\n9.9.2 算法和类方法的关系 \r\n9.9.3 算法组件 \r\n9.10 小结 \r\n\r\n第十章 内存管理 \r\n\r\n10.1 C++中的动态内存分配 \r\n10.1.1 C++中的静态内存分配 \r\n10.1.2 对象的动态内存分配 \r\n10.2 分配算符类 \r\n10.2.1 分配算符类 \r\n10.2.2 分配算符类型定义成员 \r\n10.2.3 分配算符类的成员函数 \r\n10.3 Auto_ptr 类 \r\n10.3.1 auto_ptr对象的构造函数 \r\n10.3.2 使用auto_ptr \r\n10.4 小结 \r\n\r\n第十一章 数字(numerics)类 \r\n\r\n11.1 数值界限(numeric_limits)类 \r\n11.2 数值数组(valarray)类 \r\n11.2.1 数值数组类组 \r\n11.2.2 向量操作与数值数组类 \r\n11.2.3 构造数组对象 \r\n11.2.4 重要的数值数组访问方法 \r\n11.2.5 数值数组的修改 \r\n11.3 复数(complex)类 \r\n11.4 小结 \r\n\r\n第十二章 语言支持 \r\n\r\n12.1 国际化与本地化 \r\n12.2 标准C++类的国际化支持 \r\n12.2.1 facet类 \r\n12.2.2 比较(collate)facet类 \r\n12.2.3 Ctype facet类 \r\n12.2.4 数字facet类 \r\n12.2.5 货币(monetary)facet类 \r\n12.2.6 时间facet类 \r\n12.2.7 消息facet类 \r\n12.3 创建并使用方面对象 \r\n12.4 现场(locale)类 \r\n12.4.1 构造现场对象 \r\n12.4.2 现场运算符 \r\n12.4.3 全局的和典型的现场 \r\n12.4.4 访问现场方面 \r\n12.4.5 流的方面 \r\n12.5 char_traits类 \r\n12.5.1 char_traits的方法 \r\n12.6 小结 \r\n\r\n第十三章 用Java连接(interfacing)C++ \r\n\r\n13.1 Java API \r\n13.2 C++与Java的通信 \r\n13.3 Java本地接口(Java Native Interface) \r\n13.3.1 请求API \r\n13.4 一个JNI的例子 \r\n\r\n第十四章 综述 \r\n\r\n14.1 新的ANSI/ISO 标准 \r\n14.2 IO流类的变化 \r\n14.2.1 注意Narrow与Wide的差异 \r\n14.2.2 IO流的类型定义(typedef) \r\n14.2.3 新的缺省流声明 \r\n14.2.4 IO流和异常 \r\n14.3 新类 \r\n14.4 标准C++类库的3个视图(view) \r\n14.4.1 新的体系结构视图 \r\n14.4.2 接口视图 \r\n14.5 标准C++类和Java类集成 \r\n14.6 图示C++类和对象层次结构 \r\n14.7 编译器的兼容性、可移植性和展望 \r\n14.8 仅仅是个开始
C++是一种通用程序设计语言. 它支持目前使用的3种最重要的程序设计方法:
●结构化程序设计方法.
●面向对象程序设计方法.
●参数化(生成式)程序设计方法.
对以上3种程序设计方法的支持使得C什语言成为一种灵活. 功能强大. 完备的程序设计语言. 任何对C++语言的讨论都分为两个部分:表达能力极强的内容广泛的语言和一个很大的可重用软件组件库. 第二部分称为标准C++库, 其中包含了大量的函数. 对象. 算法. 本书将重点介绍标准C++库的两个重要的组件集合:
●标准C++类.
●标准C++算法.
尽管目前并不缺少介绍C++语言和如何使用C什语言编程的专业书籍, 但是介绍标难C++库的书籍几乎没有, 详细描述C++库的所有面向对象和参数化组件的书籍就更少了. 一些书籍介绍了标准C++类的某些组件, 例如, 输入输出流类与标准模板库, 另一些书籍仅仅是简单的概述. 在写作本书时, 还没有资料为程序员和软件开发人员提供关于ANSI/ISO C++类和算法的全面和综合的了解. 本书将为程序员和软件开发人员提供关于最新ANSI/ISO
C++标准的面向对象组件和算法的完整指导和参考.
一. 标准C++类与算法
标准C++类和算法包含很广泛的内容. 它为C什程序设计人员提供了:
●面向对象的输入/输出方法.
●对参数化(生成式)程序设计方法的支持.
●面向对象的异常处理方法.
●面向对象的软件国际化方法.
●面向对象的数据结构.
●面向对象的存储模型.
标准C十十类和算法为软件开发人员提供了可靠的现成可用(易用)的软件组件. 这些类为软件开发人员提供了字符串处理. 异常处理. 面向对象的数据输入与输出. 运行类型管理. 存储管理. 数据管理. 面向对象的大型计算支持. 硬件管理. 软件国际化等的面向对象设计方法.
在本书中, 我们将详细讨论标准C++类和算法组件, 将对每个类的内部运行方式和每个类提供的服务做详细描述. 本书还包含所有标准C什类的参考信息, 每个类参考信息包括一个简单. 易于理解的关于如何使用该类的描述以及相关的系统需求和性能问题. 本书还可以作为C++标准类库中每个类和每个成员函数的完全参考手册.
二. 为什么标准C++类和算法如此重要
ANSI(美国国家标准化组织)与IS0(国际标准化组织)对C++语言已经接受并批准了一个标淮. 这意味着任何符合ANSMS0标准的C++语言执行器都支持本书所讨论的类和算法. 这也意味着, 读者可以开发单一一组软件组件, 在本国和国际范围内都可以使用. C++语言类和算法的标准化使得C++程序员和软件开发人员可以在一个环境下设计C++语言组件而在另一个环境下编译该组件. 例如, UNIX环境下的C十十语言标准组件可以与Macintosh环境下的C++语言标准组件一起工作. 在PC工作站环境下运行的C什语言标准组件也可以在大型计算机环境下运行.
● 健壮的. 通用的. 可预知组件
对于软件开发人员, 标准C什类和算法是非常重要的, 因为它们已经经过测试. 它们是健壮的软件组成单元, 可以立即使用. 在设计大型的面向对象的程序. 类库. 应用程序框架. 大型软件系统时, 标准的C什类和算法可以作为软件基础的组成块.
标准C++算法的执行性能和效率已有文档记录. 预先了解标准C++算法的执行效率和性能可以使开发人员在程序设计时对性能和效率进行综合的考虑. 如果一个排序程序使用标准C十十类和算法, 我们可以精确地知道对一个大的对象列表排序时的运行时间. 我们可以精确地知道在, 个文件. 列表或者是其他对象集合中查询一个特定对象是否存在时的运行时间. 因为标准组件支持参数化(生成式)程序设计方法, 我们可以在解决一个问题后, 把问题的解决方法应用于许多不同的环境. 因此, C++标准类和算法可以提高程序设计人员的生产效率和软件的重用性能. 简而言之, C十十标准类和算法可以使程序设计人员的工作更加容易.
三. 本书的读者对象
本书提供了对标准C+类和算法的介绍, 因此适用于初学者和高级程序设计人员. 本书假设读者对C+程序设计语言已经有简单的了解. 本书简单回顾了面向对象程序设计方法和参数化程序设计方法的基本概念, 以便没有学习过这些知识或已经忘记这些知识的读者方便地学习本书. 需要集成Java程序和C++程序的Java程序员将在本书中找到标准C++ 类. 类属性. 类方法的完整描述和详细文档资料.
第十三章特别讨论了如何在C++类中访问Java类. 需要学习如何把JVM(Java虚拟机)嵌入C++程序的C++程序员会发现本书非常有帮助. 并且, 因为本书既可作为学习指导又可作为参考手册, 专业的C++程序员将会发现在本书参考部分的类描述和成员函数的解释是大多数C++编译器的文档资料的一个很好的补充. 面向对象应用程序框架和CORBA类的设计人员将会发现本书关于标准C++类的结构和接口的讨论是非常及时的.
四. 编译器环境
本书中的例程和应用实例都用遵循ANSMS0标准的C++语言设计. 因此, 任何支持新ANSI/ISO标准的C++执行器都能够对书中给出的例子进行编译. 但是, 这并不表示本书对于那些没有最新的编译器环境的读者没有使用价值. 值得注意的是, 在写作本书时, 没有一个编译器提供商100%地支持新的标准, 因此, 我们尽力使得示例代码能够在大多数商业C++执行器环境下编译执行. 本书90%的示例代码可以直接或经过很少修改后在以下环境成功地编译:
Sun公司VisualWorkshop C++3. 0
GNUC++2. 7. 2与2. 8
Inprise(Borland)5. 0
Inprise(Borland)C++Builder 3. 0
Inprise (Borland)C++Builder 4. 0
Microsoft VisualC++5. 0
Microsfot VisualC++6. o
IBM公司的Visual Age 4. 0
Portland Group的C++ Workstation
我们测试过的一些编译器不支持数值数组类和模板化的输入输出流类.
五. 内容组织与示例代码
每一章内容包括讨论与例子. 图与表用于帮助解释和组织比较复杂的论题. 有些章节包含附属信息帮助读者更深入地理解算法. 异常处理. 容器类. 读者可以跳过这些信息. 示例代码设计简单, 易于理解, 我们的目的不是设计最优或高效率的代码, 我们的目的是以直观的方式在示例代码中表达基本的概念.
1. C++类参考
随书光盘的电子文档中提供了C++类和算法的完整信息, 该文档可以使用Microsoft InternetExplorer 3. 0或4. 0浏览.
2. 测试和代码可靠性
本书中所有的例程和应用实例都经过了测试以确保正确, 但是我们并不保证这些程序完全没有错误. 符合任何特定的商业销售标准. 满足用户特定的应用需求. 作者和出版商郑重声明, 对使用本书和随书光盘中包含的例程和应用实例造成的直接或间接的损失不承担任何责任.
参加本书翻译的人员有:夏毅(前言, 第一章), 石畅(第二章, 第七. 八章), 张海云(第三---六章, 第九---十四章), 全书由石畅进行总体协调.