C++标准程序库: 自修教程与参考手册
✍ Scribed by [德] Nicolai M·Josuttis
- Publisher
- 华中科技大学出版社
- Year
- 2002
- Tongue
- Chinese
- Leaves
- 825
- Category
- Library
No coin nor oath required. For personal study only.
✦ Synopsis
这本包含最新资料的完整书籍,反映出被ANSI/ISO C++语言标准规格书纳入的C++标准程序库的最新组成。更明确地说,这本书将焦点放在标准模板库身上,检验其中的容器、迭代器、仿函数和算法。读者还可以找到特殊容、字串、数值类别、国际化议题、IOStream。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细部解说、陷阱、意想不到的危险,以及相关类别和函数的精确樯记式和定义式。
✦ Table of Contents
封面
侯捷译序
孟岩译序
目录
前言
致谢
1 关于本书
1.1 缘起
1.2 阅读前的必要基础
1.3 本书风格与结构
1.4 如何阅读本书
1.5 目前发展形式
1.6 范例程序代码及额外信息
1.7 回应
2 c++ 及其标准程序库简介
2.1 沿革
2.2 新的语言特性
2.2.1 templates(模板)
2.2.2 基本型别的显式初始化(explicit initialization)
2.2.3 异常处理(exception handling)
2.2.4 命名空间(namespaces)
2.2.5 bool型别
2.2.6 关键词explicit
2.2.7 新的型别转换操作符(type conversion operators)
2.2.8 常数静态成员(constant static members)的初始化
2.2.9 main() 的定义
2.3 复杂度和big-o 表示法
3 一般概念(general concepts)
3.1 命名空间(namespace)std
3.2 头文件(header files)
3.3 错误(error)处理和异常(exception)处理
3.3.1 标准异常类别(standard exception classes)
3.3.2 异常类别(exception classes)的成员
3.3.3 抛出标准异常
3.3.4 从标准异常类别(exception classes)中派生新的类别
3.4 配置器(allocators)
4 通用工具(utilities)
4.1 pairs(对组)
4.1.1 便捷函数make_pair()
4.1.2 pair运用实例
4.2 class auto_ptr
4.2.1 auto_ptr的发展动机
4.2.2 auto_ptr拥有权(ownership)的转移
4.2.3 auto_ptrs 做为成员之一
4.2.4 auto_ptrs 的错误运用
4.2.5 auto_ptr运用实例
4.2.6 auto_ptr实作细目
4.3 数值极限(numeric limits)
4.4 辅助函数
4.4.1 挑选较小值和较大值
4.4.2 两值互换
4.5 辅助性的“比较操作符”(comparison operators)
4.6 头文件[cstddef] 和[cstdlib]
4.6.1 [cstddef] 内的各种定义
4.6.2 [cstdlib] 内的各种定义
5 standard template library(标准模板库)
5.1 stl 组件(stl components)
5.2 容器(containers)
5.2.1 序列式容器(sequence containers)
5.2.2 关联式容器(associative containers)
5.2.3 容器配接器(container adapters)
5.3 迭代器(iterators)
5.3.1 关联式容器的运用实例
5.3.2 迭代器类型(iterator categories)
5.4 算法(algorithms)
5.4.1 区间(ranges)
5.4.2 处理多个区间
5.5 迭代器之配接器(iterator adapters)
5.5.1 insert iterators(安插型迭代器)
5.5.2 stream iterators(串流迭代器)
5.5.3 reverse iterators(逆向迭代器)
5.6 更易型算法(manipulating algorithms)
5.6.1 移除(removing)元素
5.6.2 更易型算法和关联式容器
5.6.3 算法v.s. 成员函数
5.7 使用者自定之泛型函数(user-defined generic functions)
5.8 以函数做为算法的参数
5.8.1“以函数做为算法的参数”实例示范
5.8.2 判断式(predicates)
5.9 仿函数(functors or function objects)
5.9.1 什么是仿函数
5.9.2 预先定义的仿函数
5.10 容器内的元素(container elements)
5.10.1 容器元素的条件
5.10.2 value 语意vs. reference 语意
5.11 stl内部的错误处理和异常处理
5.11.1 错误处理(error handling)
5.11.2 异常处理(exception handling)
5.12 扩展stl
6 stl 容器(containers)
6.1 容器的共通能力和共通操作
6.1.1 容器的共通能力
6.1.2 容器的共通操作
6.2 vectors
6.2.1 vectors 的能力
6.2.2 vector 的操作函数
6.2.3 将vectors 当做一般arrays 使用
6.2.4 异常处理
6.2.5 vectors 运用实例
6.2.6 class vector[bool]
6.3 deques
6.3.1 deques 的能力
6.3.2 deque 的操作函数
6.3.3 异常处理(exception handling)
6.3.4 deques 运用实例
6.4 lists
6.4.1 lists 的能力
6.4.2 list 的操作函数
6.4.3 异常处理(exception handling)
6.4.4 lists 运用实例
6.5 sets和multisets
175
6.5.1 sets 和multisets 的能力
6.5.2 set 和multiset 的操作
6.5.3 异常处理(exception handling)
6.5.4 sets 和multisets 运用实例
6.5.5 执行期指定排序准则(sorting criterion)
6.6 maps 和multimaps
6.6.1 maps 和multimaps 的能力
6.6.2 map 和multimap 的操作函数
6.6.3 将maps 视为关联式数组(associated arrays)
6.6.4 异常处理(exception handling)
6.6.5 maps 和multimaps 运用实例
6.6.6 综合实例:运用maps, strings 并于执行期指定排序准则
6.7 其它的stl容器
6.7.1 strings 可被视为一种stl容器
6.7.2 arrays 可被视为一种stl容器
6.7.3 hash tables
6.8 动手实现reference 语意
6.9 各种容器的运用时机
6.10 细说容器内的型别和成员
6.10.1 容器内的型别
6.10.2 生成(create)、复制(copy)、销毁(destroy)
6.10.3“非变动性操作(nonmodifying operations)
6.10.4 赋值(指派, assignments)
6.10.5 直接元素存取
6.10.6 “会产出迭代器”的各项操作
6.10.7 元素的安插(inserting)和移除(removing)
6.10.8 lists 的特殊成员函数
6.10.9 对配置器(allocator)的支持
6.10.10 综观stl容器的异常处理
7 stl 迭代器(iterators)
7.1 迭代器头文件
7.2 迭代器类型(iterator categories)
7.2.1 input(输入)迭代器
7.2.2 output(输出)迭代器
7.2.3 forward(前向)迭代器
7.2.4 bidirectional(双向)迭代器
7.2.5 random access(随机存取)迭代器
7.2.6 vector 迭代器的递增(increment)和递减(decrement)
7.3 迭代器相关辅助函数
7.3.1 advance() 可令迭代器前进
7.3.2 distance() 可处理迭代器之间的距离
7.3.3 iter_swap() 可交换两个迭代器所指内容
7.4 迭代器配接器(iterator adapters)
7.4.1 reverse(逆向)迭代器
7.4.2 insert(安插型)迭代器
7.4.3 stream(串流)迭代器
7.5 迭代器特性(iterator traits)
7.5.1 为迭代器编写泛型函数(generic functions)
7.5.2 使用者自定(user-defined)的迭代器
8 stl 仿函数(functors or function objects)
8.1 仿函数的概念
8.1.1 仿函数可当做排序准则(sort criteria)
8.1.2 仿函数可拥有自己的内部状态(internal state)
8.1.3 for_each() 的回返值
8.1.4 判断式(predicates)和仿函数(functors)
8.2 预定义的仿函数
8.2.1 函数配接器(function adapters)
8.2.2 针对成员函数而设计的函数配接器
8.2.3 针对一般函数(非成员函数)而设计的函数配接器
8.2.4 让自定仿函数也可以使用函数配接器
8.3 辅助用(组合型)仿函数
8.3.1 一元组合函数配接器(unary compose function object adapters)
8.3.2 二元组合函数配接器(binary compose function object adapters)
9 stl 算法(algorithms)
9.1 算法头文件(header files)
9.2 算法概观
9.2.1 简介
9.2.2 算法分门别类
9.3 辅助函数
9.4 for_each() 算法
9.5 非变动性算法(nonmodifying algorithms)
9.5.1 计算元素个数
9.5.2 求最大值和最小值
9.5.3 搜寻元素
9.5.4 区间的比较
9.6 变动性算法(modifying algorithms)
9.6.1 复制(copying)元素
9.6.2 转换(transforming)和结合(combining)元素
9.6.3 互换(swapping)元素内容
9.6.4 赋予(assigning)新值
9.6.5 替换(replacing)元素
9.7 移除性算法(removing algorithms)
9.7.1 移除某些特定元素
9.7.2 移除重复元素
9.8 变序性算法(mutating algorithms)
9.8.1 逆转(reversing)元素次序
9.8.2 旋转(rotating)元素次序
9.8.3 排列(permuting)元素
9.8.4 重排元素(shuffling, 搅乱次序)
9.8.5 将元素向前搬移
9.9 排序算法(sorting algorithms)
9.9.1 对所有元素排序
9.9.2 局部排序(partial sorting)
9.9.3 根据第n 个元素排序
9.9.4 heap 算法
9.10 已序区间算法(sorted range algorithms)
9.10.1 搜寻元素(searching)
9.10.2 合并元素(merging)
9.11 数值算法(numeric algorithms)
9.11.1 加工运算后产生结果
9.11.2 相对值和绝对值之间的转换
10 特殊容器(special containers)
10.1 stacks(堆栈)
10.1.1 核心界面
10.1.2 stacks 运用实例
10.1.3 class stack[] 细部讨论
10.1.4 一个使用者自定的stack class
10.2 queues(队列)
10.2.1 核心界面
10.2.2 queues 运用实例
10.2.3 class queue[] 细部讨论
10.2.4 一个使用者自定的queue class
10.3 priority queues(优先队列)
10.3.1 核心界面
10.3.2 priority queues 运用实例
10.3.3 class priority_queue[] 细部讨论
10.4 bitsets
10.4.1 bitsets 运用实例
10.4.2 class bitset 细部讨论
11 strings(字符串)
11.1 动机
11.1.1 例一:引出一个临时文件名
11.1.2 例二:引出一段文字并逆向打印
11.2 string classes 细部描述
11.2.1 string 的各种相关型别
11.2.2 操作函数(operations)综览
11.2.3 建构式和解构式(constructors and destructors)
11.2.4 strings 和c-strings
11.2.5 大小(size)和容量(capacity)
11.2.6 元素存取(element access)
11.2.7 比较(comparisons)
11.2.8 更改内容(modifiers)
11.2.9 子字符串及字符串接合
11.2.10 i/o 操作符
11.2.11 搜寻和查找(searching and finding)
11.2.12 数值npos 的意义
11.2.13 strings 对迭代器的支援
11.2.14 国际化(internationalization)
11.2.15 效率(performance)
11.2.16 strings 和vectors
11.3 细说string class
11.3.1 内部的型别定义和静态值
11.3.2 生成(create)、拷贝(copy)、销毁(destroy)
11.3.3 大小(size)和容量(capacity)
11.3.4 比较(comparisons)
11.3.5 字符存取(character access)
11.3.6 产生c-strings 和字符数组(character arrays)
11.3.7 更改内容
11.3.8 搜寻(searching and finding)
11.3.9 子字符串及字符串接合
11.3.10 i/o 函数
11.3.11 产生迭代器
11.3.12 对配置器(allocator)的支持
12 数值(numerics)
12.1 复数(complex numbers)
12.1.1 class complex运用实例
12.1.2 复数的各种操作
12.1.3 class complex[] 细部讨论
12.2 valarrays
12.2.1 认识valarrays
12.2.2 valarray 的子集(subsets)
12.2.3 class valarray 细部讨论
12.2.4 valarray子集类别(subset classes)细部讨论
12.3 全域性的数值函数
13 以stream classes完成输入和输出
13.1 i/o streams 基本概念
13.1.1 stream物件
13.1.2 stream类别
13.1.3 全域性的stream物件
13.1.4 stream操作符
13.1.5 操控器(manipulators)
13.1.6 一个简单的例子
13.2 基本的stream类别和stream对象
13.2.1 相关类别及其阶层体系
13.2.2 全域性的stream物件
13.2.3 头文件(headers)
13.3 标准的stream操作符[[ 和]]
13.3.1 output操作符[[
13.3.2 input操作符]]
13.3.3 特殊型别的i/o
13.4 streams 的状态(state)
13.4.1 用来表示streams 状态的一些常数
13.4.2 用来处理streams 状态的一些成员函数
13.4.3 stream状态与布尔条件测试
13.4.4 stream的状态和异常
13.5 标准i/o 函数
13.5.1 输入用的成员函数
13.5.2 输出用的成员函数
13.5.3 运用实例
13.6 操控器(manipulators)
13.6.1 操控器如何运作
13.6.2 使用者自定操控器
13.7 格式化(formatting)
13.7.1 格式标志(format flags)
13.7.2 布尔值(boolean values)的i/o 格式
13.7.3 字段宽度、填充字符、位置调整
13.7.4 正记号与大写字
13.7.5 数值进制(numeric base)
13.7.6 浮点数(floating-point)表示法
13.7.7 一般性的格式定义
13.8 国际化(internationalization)
13.9 文件存取(file access)
13.9.1 文件标志(file flags)
13.9.2 随机存取
13.9.3 使用文件描述器(file descriptors)
13.10 连接input streams 和output streams
13.10.1 以tie()完成“松耦合”(loose coupling)
13.10.2 以stream缓冲区完成“紧耦合”(tight coupling)
13.10.3 将标准streams 重新导向(redirecting)
13.10.4 用于读写的streams
13.11 string stream classes
13.11.1 string stream classes
13.11.2 char* stream classes
13.12 “使用者自定型别”之i/o操作符
13.12.1 实作一个output 操作符
13.12.2 实作一个input 操作符
13.12.3 以辅助函数完成i/o
13.12.4 以非格式化函数完成使用者自定的操作符
13.12.5 使用者自定的格式标志(format flags)
13.12.6 使用者自定之i/o 操作符的数个依循惯例
13.13 stream buffer classes
13.13.1 从使用者的角度看stream缓冲区
13.13.2 stream缓冲区迭代器(buffer iterators)
13.13.3 使用者自定的stream 缓冲区
13.14 关于效能(performance)
13.14.1 与c 标准输入输出流(standard streams)同步
13.14.2 stream缓冲区内的缓冲机制
13.14.3 直接使用stream缓冲区
14 国际化(internationalization, i18n)
14.1 不同的字符编码(character encoding)
14.1.1 宽字符(wide-character)和多字节文本(multibyte text)
14.1.2 字符特性(character traits)
14.1.3 特殊字符国际化
14.2 locales 的概念
14.2.1 运用locales
14.2.2 locale facets
14.3 locales 细部讨论
14.4 facets 细部讨论
14.4.1 数值格式化
14.4.2 时间和日期格式化
14.4.3 货币符号格式化
14.4.4 字符的分类和转换
14.4.5 字符串校勘(string collation)
14.4.6 信息国际化
15 空间配置器(allocators)
15.1 应用程序开发者如何使用配置器
15.2 程序库开发者如何使用配置器
15.3 c++ 标准程序库的预设配置器
15.4 使用者自行定义的配置器
15.5 配置器细部讨论
15.5.1 内部定义的型别
15.5.2 各项操作
15.6“未初始化内存”之处理工具细部讨论
网络上的资源(internet resources)
参考书目(bibliography)
索引(index)
📜 SIMILAR VOLUMES