
Extended STL.Volume 1,Collections and iterators
副标题:无
分类号:
ISBN:9787111242277
微信扫一扫,移动浏览光盘
简介
本书以STLSoft为基础,广泛深入地论述了C++标准库STL的相关内容。全书共三部分43章,包括标准模板库、扩展STL、元素引用类别、DRY SPOT原则、抽象泄漏法则、契约式编程、约束、垫片、不完备结构一致性的发端、资源获取、模板工具、推断式接口适配、Henney假说、适配、遍历进程和模块、环境变量、字符串分词、聚集分散的I/O以及迭代器等内容。.
全书通过严谨的表述与丰富的示例,将概念和理论与实际的设计和代码结合起来,从而使读者既能深刻地理解STL的知识,又能熟练地掌握STL运用方法。
著名的C++专家Matthew Wilson在本书中展示了如何超越C++标准并扩展标准模板库(Standard Template Library,STL),进入包含API和非标准集合的更广阔的C++世界,以编写更有效、更有表达力、更灵活、更健壮的软件。
在本书中,Wilson使用自己创新的技术帮助读者掌握STL扩展特性,这体现在两个方面:将专用技术库和操作系统API适配为STL兼容的集合,并定义精密的迭代适配器,使STL潜在的效率和表现力得以实现。Wilson用实际的例子阐明了几个强大的概念和技巧,让你在连STL的创造者都未曾预见的方向上扩展STL,其中包括集合、元素参考类别、外部迭代器失效和推断式接口适配。
对于那些对STL知之甚微的C++程序员,本书将是宝贵的资源。它帮助你:
●学习STL扩展中特有的原则和技巧。
●通过查看STL扩展的内部实现,进一步学习STL。..
●学习实现封装的通用技术,在操作系统API和专用技术库之上实现封装。
●学习如何编写迭代器适配器,并理解其实现和使用上的限制及其背后的原理。
本书主要内容包括
●编写大部分集合,并理解它们与容器的不同之处。
●掌握元素引用类别:定义它们,检测它们,并利用它们设计STL扩展集合和迭代器。
●处理外部迭代器失效,并理解它对STL兼容集合的设计产生的惊人影响。
●适配实际的API,包括从文件系统遍历到分散或聚集I/O。
●使用独立迭代器类型,从简单的std::ostream_iterator扩展到复杂的过滤和转换类型或值的适配器。...
目录
译者序.
前言
致谢
序言
编排体例
第一部分基础
第1章标准模板库
1.1核心概念
1.2容器
1.2.1序列容器
1.2.2关联容器
1.2.3存储空间的连续性
1.2.4交换
1.3迭代器
1.3.1输入迭代器
1.3.2输出迭代器
1.3.3前向迭代器
1.3.4双向迭代器
1.3.5随机访问迭代器
1.3.6成员选取运算符
.1.3.7预定义的迭代器适配器
1.4算法
1.5函数对象
1.6分配器
第2章扩展stl:stl与真实世界的碰撞
2.1术语
2.2集合
2.3迭代器
2.3.1可变性
2.3.2遍历
2.3.3在编译期决定特性
2.3.4元素引用类别
2.3.5共享状态信息和独立状态信息
2.3.6需要修改迭代器精化的分类吗
第3章元素引用类别
3.1介绍
3.2c++引用
3.3元素引用类别的分类法
3.3.1持久引用
3.3.2固定引用
3.3.3可失效引用
3.3.4瞬时引用
3.3.5按值临时引用
3.3.6空引用
3.4使用元素引用类别
3.4.1在编译时检测引用类别
3.4.2使用编译器帮助避免迭代器未定义行为
3.5定义operator-]()
3.6元素引用类别:尾声
第4章奇异去临时引用
第5章dry spot原则
5.1c++编程中符合dry spot的做法
5.1.1常量
5.1.2dimensionof()
5.1.3创建函数
5.2c++编程中不太符合dry spot的做法
5.2.1父类
5.2.2函数返回类型
5.3封闭的名字空间
第6章抽象泄漏法则
第7章契约式编程
7.1强制的类型
7.2强制的机制
第8章约束
8.1利用c++类型系统
8.2静态断言
第9章垫片
9.1介绍
9.2主要的垫片
9.2.1属性垫片
9.2.2转换垫片
9.3复合垫片
第10章鸭规则和鹅规则:不完备结构一致性的发端
10.1一致性
10.1.1类型一致性
10.1.2结构一致性
10.1.3鸭规则和鹅规则
10.2显式语义一致性
10.2.1概念
10.2.2给成员类型打标签
10.2.3垫片
10.3交集一致性
第11章资源获取即初始化
11.1资源可变性
11.2资源来源
第12章模板工具
12.1特征类
12.1.1base_type_traits
12.1.2sign_traits
12.1.3类型的特性:迷你特征
12.1.4is_integral_type
12.1.5is_signed_type
12.1.6is_fundamental_type
12.1.7is_same_type
12.2类型生成器
12.3真正的typedef
第13章推断式接口适配:编译时适配接口不全的类型
13.1介绍
13.2适配接口不全的类型
13.3适配非变动性集合
13.4推断式接口适配
13.4.1类型选择
13.4.2类型检测
13.4.3类型修正
13.5把iia应用于区间
第14章henney假说:当模板参数表太长
第15章通过equal()减少友元函数的使用
15.1警惕非成员友元函数的滥用
15.2集合及其迭代器
第16章基本组件
16.1介绍
16.2auto_buffer
16.2.1它不是容器
16.2.2类接口
16.2.3复制
16.2.4分配器宜最后
16.2.5swap()
16.2.6性能
16.3filesystem_traits
16.3.1成员类型
16.3.2通用字符串处理
16.3.3文件系统名字处理
16.3.4文件系统状态操作
16.3.5文件系统控制操作
16.3.6返回类型和错误处理
16.4file_path_buffer
16.4.1basic_
16.4.2unix和path_max
16.4.3windows和max_path
16.4.4缓冲区的使用
16.5scoped_handle
16.6dl_call()
第二部分集合
第17章适配glob api
17.1简介
17.1.1动机
17.1.2glob api
17.2解析使用原始api的版本
17.3unixstl∷glob_sequence
17.3.1公有接口
17.3.2成员类型
17.3.3成员变量
17.3.4标志
17.3.5构造
17.3.6glob_sequence元素个数和元素访问
17.3.7迭代
17.3.8init_glob_()
17.4解析使用glob_sequence实现的版本
17.5小结
第18章插曲:构造函数冲突以及不良的设计
第19章适配opendir/readdir api
19.1介绍
19.1.1动机
19.1.2opendir/readdir api
19.2分析直接使用api的代码
19.3unixstl∷readdir_sequence
19.3.1成员类型和成员常量
19.3.2构造
19.3.3元素迭代和集合大小相关的方法
19.3.4提取属性的方法
19.3.5const_iterator,版本1
19.3.6使用版本1
19.3.7const_iterator,版本2:复制语义
19.3.8operator++()
19.3.9迭代器类别和可适配的成员类型
19.3.10operator -]()
19.3.11支持fullpath和absolutepath标志
19.4其他的实现方法
19.4.1把迭代结果保存为快照
19.4.2把迭代结果保存为迭代器
19.5总结
第20章适配findfirstfile/findnextfile api
20.1介绍
20.1.1动机
20.1.2findfistfile/findnextfile api
20.2对例子的分解
20.2.1冗长版本
20.2.2精简版本
20.2.3重解析点和无限递归
20.3basic_findfile_sequence的设计
20.4winstl∷basic_findfile_sequence
20.4.1类的接口
20.4.2构造
20.4.3迭代
20.4.4如果编译器不支持异常
20.5winstl∷basic_findfile_sequence_const_iterator
20.5.1构造
20.5.2find_first_file_()
20.5.3operator ++()
20.6winstl∷basic_findfile_sequence_value_type
20.7垫片
20.8basic_findfile_sequence为什么不用垫片和构造函数模板
20.9小结
20.10结尾:用recls进行文件系统遍历
第21章插曲:枚举ftp服务器目录——保持效率和可用性的平衡
21.1inetstl∷basic_findfile_sequence
21.2inetstl∷basic_ftpdir_sequence
第22章遍历进程和模块
22.1集合的特征
22.2winstl∷pid_sequence
22.2.1基于组合的简单实现
22.2.2获取进程id
22.2.3没有异常支持时的工作方式
22.3winstl∷process_module_sequence
22.4枚举一个系统中的所有模块
22.5排除系统伪进程
22.6处理缺失api头文件的情况
22.7总结
第23章斐波那契序列
23.1简介
23.2斐波那契序列
23.3stl序列表示的斐波那契数列
23.3.1无限序列的接口
23.3.2为序列添加契约
23.3.3换用别的值类型
23.3.4对值类型进行约束
23.3.5抛出std∷overflow_error
23.4可发现性的欠缺
23.5定义有限上界
23.5.1最终还是要用迭代器
23.5.2由构造函数限定的区间
23.5.3true_typedefs
23.6小结
第24章适配mfc的carray容器族
24.1介绍
24.2动机
24.3模拟std∷vector
24.4设计时的考虑
24.4.1mfc的数组容器族
24.4.2carray_traits
24.4.3数组适配器类的设计
24.4.4以抽象方式操纵状态
24.4.5copy瞐nd瞫wap惯用法
24.4.6编写集合的接口
24.4.7教学方法
24.5mfcstl∷carray_adaptor_base的接口
24.6mfcstl∷carray_cadaptor
24.6.1模板声明和继承
24.6.2应用crtp
24.6.3carray_cadaptor的构造
24.6.4operator[]()
24.7mfcstl∷carray_iadaptor
24.8carray_adaptor_base的构造
24.9内存分配器
24.10元素访问方法
24.11元素迭代
24.11.1begin()和end()
24.11.2rbegin()和rend()
24.12和容器大小相关的方法
24.13容器容量相关的方法
24.14比较相关的方法
24.15修改容器结构的方法
24.15.1push_back()
24.15.2assign()
24.15.3pop_back()和clear()
24.15.4erase()..
24.15.5insert()
24.16赋值和swap()
24.17总结
24.18在cd上
第25章环境变量的map
25.1介绍
25.2动机
25.3getenv()、putenv()、setenv()/unsetenv()和environ
25.4platformstl∷enviroment_variable_traits
25.5规划接口
25.6通过名字查找
25.6.1选择1:返回固定/瞬时引用,指向一个缓存对象,具有最新值
25.6.2选择2:返回固定引用,指向一个缓存对象,具有快照值
25.6.3选择3:返回固定引用,指向一个缓存对象,具有最新值
25.6.4选择4:返回按值临时引用,具有最新值
25.6.5通过名字查找:尾声
25.7通过名字插入、更新和删除值
25.8迭代
25.8.1第1版:连续迭代器
25.8.2第2版:双向迭代器
25.8.3第3版:快照
25.8.4第4版:引用计数的快照
25.9最终的迭代实现
25.9.1可变的快照
25.9.2创建快照
25.9.3const_iterator嵌套类
25.9.4insert()方法
25.9.5erase()方法
25.9.6operator[]()和lookup()
25.9.7snapshot嵌套类
25.10异质的引用类别
25.11size()和下标索引
25.12总结
25.13在cd上
第26章在z平面上来回穿梭
26.1序言
26.2介绍
26.3第1版:前向迭代
26.3.1zorder_iterator,第1版
26.3.2window_peer_sequence,第1版
26.4第2版:双向迭代
26.5处理外部更改
26.6winstl∷child_window_sequence
26.7双向迭代器的蓝调音乐
26.7.1end()标记的陷阱
26.7.2致命的双重解引用
26.7.3当双向迭代器不是前向迭代器,而是可逆可复制迭代器
26.8winstl∷zorder_iterator:自身的反转
26.8.1zorder_iterator特征类
26.8.2zorder_iterator_tmpl[]
26.8.3反向的语义
26.9同级窗口序列的定稿
26.10总结
26.11z平面:尾声
第27章字符串分词
27.1介绍
27.2strtok()
27.3synesisstl∷stringtokeniser
27.4字符串分词的用例
27.5字符串分词的其他选择
27.5.1strtok_r()
27.5.2iostreams
27.5.3stlsoft∷find_next_token()
27.5.4boost∷tokenizer
27.6stlsoft∷string_tokeniser
27.6.1stlsoft∷string_tokeniser∷const_iterator
27.6.2确定迭代器类别和元素引用类别
27.6.3stlsoft∷string_tokeniser_type_traits
27.6.4stlsoft∷string_tokeniser_comparator
27.7测试代码
27.7.1以单个字符作为分隔符
27.7.2字符串作为分隔符
27.7.3保留空白字段
27.7.4复制还是引用:考虑使用“字符串视图”(string view)
27.7.5字符集作为分隔符
27.8愚蠢的策略类
27.8.1经由继承重构模板参数
27.8.2类型生成器模板
27.8.3关于henney假说
27.9性能
27.10总结
第28章适配com枚举器
28.1介绍
28.2动机
28.2.1冗长版
28.2.2短小版
28.3com枚举器
28.3.1ienumxxxx∷next()
28.3.2ienumxxxx∷skip()
28.3.3ienumxxxx∷reset()
28.3.4ienumxxxx∷clone()
28.3.5枚举器的各种值类型
28.4分解冗长版
28.5comstl∷enumerator_sequence
28.5.1enumerator_sequence的公共接口
28.5.2成员类型及成员常量
28.5.3值策略(value policies)
28.5.4成员变量
28.5.5构造函数
28.5.6迭代方法
28.5.7迭代器方法的const限定是错误的
28.5.8破坏了值语义
28.6comstl∷enumerator_sequence∷iterator
28.6.1构造
28.6.2迭代方法
28.6.3equal()
28.7comstl∷enumerator_sequence∷iterator∷enumeration_context
28.7.1为什么需要枚举上下文
28.7.2类定义
28.7.3构造
28.7.4迭代器的支持方法
28.7.5不变量
28.8迭代器复制策略
28.8.1comstl∷input_cloning_policy
28.8.2comstl∷forward_cloning_policy
28.8.3comstl∷cloneable_cloning_policy
28.9选择默认的复制策略:应用最小意外原则
28.10总结
28.10.1为什么不默认使用前向迭代器
28.10.2为什么不默认使用输入迭代器
28.10.3为什么不把q固定为1
28.10.4为什么不使用标准容器
28.11后文提要
第29章插曲:运用成员类型推断,纠正设计上的小疏忽
第30章适配com集合
30.1介绍
30.2动机
30.2.1冗长版
30.2.2简洁版
30.3comstl∷collection_sequence
30.3.1公有接口
30.3.2成员类型和常量
30.3.3构造
30.3.4迭代:干净地利用一个肮脏的把戏
30.3.5size()
30.4枚举器获取策略
30.5总结
第31章聚集分散的i/o
31.1介绍
31.2分散/聚集 i/o
31.3分散/聚集i/o api
31.3.1以com流实现线性化
31.3.2platformstl∷scatter_slice_sequence-预告
31.4适配ace_message_queue
31.4.1acestl∷message_queue_sequence,版本1
31.4.2acestl∷message_queue_sequence∷iterator
31.5吃蛋糕时间
31.5.1再快些
31.5.2acestl∷message_queue_sequence,版本2
31.5.3特化标准库
31.5.4性能
31.6总结
第32章根据参数返回不同类型
32.1介绍
32.2向ruby借颗宝石
32.3c++中的双语义下标
32.4通过字符串访问垫片扩大兼容性
32.5整数的美中不足
32.6选择返回类型和重载
32.7总结
第33章外部迭代器失效
33.1元素接口一致性
33.2windows的listbox和combobox控件
33.2.1提取元素的竞争条件
33.2.2winstl中的listbox_sequence和combobox_sequence类
33.3枚举注册表键和值
33.3.1那问题在哪
33.3.2winstl注册表库
33.3.3处理外部迭代器失效问题
33.3.4winstl∷basic_reg_key_sequence
33.4总结
33.5在cd上
第三部分迭代器
第34章增强版ostream_iterator
34.1介绍
34.2std∷ostream_iterator
34.3stlsoft∷ostream_iterator
34.3.1垫片的应用
34.3.2安全语义
34.3.3stlsoft∷ostream_iterator与std∷ostream_iterator的兼容性
34.3.4违反了设计原则吗
34.4定义流插入运算符
34.5小结
第35章插曲:借助解引用代理模式,消除笨拙的输出迭代器语法
第36章变换迭代器
36.1介绍
36.2动机
36.2.1使用std∷transform()的版本
36.2.2使用变换迭代器的版本
36.3定义迭代器适配器
36.3.1创建函数
36.3.2值类型
36.4stlsoft∷transform_iterator
36.4.1第一个版本
36.4.2构造
36.4.3自增、自减运算符和指针算术方法
36.4.4比较运算符和算术运算符
36.4.5问题在于
36.4.6第二个版本
36.4.7stlsoft∷transform_iterator
36.5复合变换
36.6违反了dry spot原则
36.6.1使用类型别名和非临时函数对象
36.6.2使用异质迭代器和算法
36.6.3接受现实,但小心谨慎
36.7没准sequence能帮上点忙
36.8小结
36.9cd上的内容
第37章插曲:命名时谨慎为好
第38章成员选取迭代器
38.1介绍
38.2动机
38.3stlsoft∷member_selector_iterator
38.4创建函数的悲哀
38.4.1以非变动性方式访问非常量数组
38.4.2以非变动性方式访问常量数组
38.4.3以变动性方式访问非常量数组
38.4.4通过迭代器类,以非变动性方式访问非常量集合
38.4.5通过迭代器类,以非变动性方式访问常量集合
38.4.6通过迭代器类,以变动性方式访问集合
38.4.7选取常量成员
38.5总结
38.6在cd上
第39章连接c风格字符串
39.1动机
39.2不灵活的版本
39.3stlsoft∷cstring_concatenator_iterator
39.4创建函数
39.5总结
39.6cd上的内容
第40章字符串对象的连接操作
40.1简介40.2stlsoft∷string_concatenator_iterator
40.3异质字符串类型的良好协作
40.4但是
40.4.1关于可赋值性
40.4.2悬空引用
40.4.3解决方案
40.5小结
第41章适配迭代器特征类
41.1introduction
41.2stlsoft∷adapted_iterator_traits
41.2.1iterator_category
41.2.2value_type
41.2.3difference_type
41.2.4pointer
41.2.5reference
41.2.6const_pointer和const_reference
41.2.7effective_reference和effective_const_reference
41.2.8effective_pointer和effective_const_pointer
41.2.9使用这个特征类
41.3小结
41.4cd上的内容
第42章过滤迭代
42.1介绍
42.2无效版
42.3用成员迭代器定义区间
42.4那么
42.5stlsoft∷filter_iterator
42.5.1前向迭代器语义
42.5.2双向迭代器语义
42.5.3随机访问迭代器语义
42.6限制迭代器的类别
42.7总结
42.8在cd上
第43章组合多个迭代器适配
43.1介绍
43.2转换筛选后的迭代器
43.3筛选转换后的迭代器
43.4两边下注
43.5总结
结语
参考书目...
前言
致谢
序言
编排体例
第一部分基础
第1章标准模板库
1.1核心概念
1.2容器
1.2.1序列容器
1.2.2关联容器
1.2.3存储空间的连续性
1.2.4交换
1.3迭代器
1.3.1输入迭代器
1.3.2输出迭代器
1.3.3前向迭代器
1.3.4双向迭代器
1.3.5随机访问迭代器
1.3.6成员选取运算符
.1.3.7预定义的迭代器适配器
1.4算法
1.5函数对象
1.6分配器
第2章扩展stl:stl与真实世界的碰撞
2.1术语
2.2集合
2.3迭代器
2.3.1可变性
2.3.2遍历
2.3.3在编译期决定特性
2.3.4元素引用类别
2.3.5共享状态信息和独立状态信息
2.3.6需要修改迭代器精化的分类吗
第3章元素引用类别
3.1介绍
3.2c++引用
3.3元素引用类别的分类法
3.3.1持久引用
3.3.2固定引用
3.3.3可失效引用
3.3.4瞬时引用
3.3.5按值临时引用
3.3.6空引用
3.4使用元素引用类别
3.4.1在编译时检测引用类别
3.4.2使用编译器帮助避免迭代器未定义行为
3.5定义operator-]()
3.6元素引用类别:尾声
第4章奇异去临时引用
第5章dry spot原则
5.1c++编程中符合dry spot的做法
5.1.1常量
5.1.2dimensionof()
5.1.3创建函数
5.2c++编程中不太符合dry spot的做法
5.2.1父类
5.2.2函数返回类型
5.3封闭的名字空间
第6章抽象泄漏法则
第7章契约式编程
7.1强制的类型
7.2强制的机制
第8章约束
8.1利用c++类型系统
8.2静态断言
第9章垫片
9.1介绍
9.2主要的垫片
9.2.1属性垫片
9.2.2转换垫片
9.3复合垫片
第10章鸭规则和鹅规则:不完备结构一致性的发端
10.1一致性
10.1.1类型一致性
10.1.2结构一致性
10.1.3鸭规则和鹅规则
10.2显式语义一致性
10.2.1概念
10.2.2给成员类型打标签
10.2.3垫片
10.3交集一致性
第11章资源获取即初始化
11.1资源可变性
11.2资源来源
第12章模板工具
12.1特征类
12.1.1base_type_traits
12.1.2sign_traits
12.1.3类型的特性:迷你特征
12.1.4is_integral_type
12.1.5is_signed_type
12.1.6is_fundamental_type
12.1.7is_same_type
12.2类型生成器
12.3真正的typedef
第13章推断式接口适配:编译时适配接口不全的类型
13.1介绍
13.2适配接口不全的类型
13.3适配非变动性集合
13.4推断式接口适配
13.4.1类型选择
13.4.2类型检测
13.4.3类型修正
13.5把iia应用于区间
第14章henney假说:当模板参数表太长
第15章通过equal()减少友元函数的使用
15.1警惕非成员友元函数的滥用
15.2集合及其迭代器
第16章基本组件
16.1介绍
16.2auto_buffer
16.2.1它不是容器
16.2.2类接口
16.2.3复制
16.2.4分配器宜最后
16.2.5swap()
16.2.6性能
16.3filesystem_traits
16.3.1成员类型
16.3.2通用字符串处理
16.3.3文件系统名字处理
16.3.4文件系统状态操作
16.3.5文件系统控制操作
16.3.6返回类型和错误处理
16.4file_path_buffer
16.4.1basic_
16.4.2unix和path_max
16.4.3windows和max_path
16.4.4缓冲区的使用
16.5scoped_handle
16.6dl_call()
第二部分集合
第17章适配glob api
17.1简介
17.1.1动机
17.1.2glob api
17.2解析使用原始api的版本
17.3unixstl∷glob_sequence
17.3.1公有接口
17.3.2成员类型
17.3.3成员变量
17.3.4标志
17.3.5构造
17.3.6glob_sequence元素个数和元素访问
17.3.7迭代
17.3.8init_glob_()
17.4解析使用glob_sequence实现的版本
17.5小结
第18章插曲:构造函数冲突以及不良的设计
第19章适配opendir/readdir api
19.1介绍
19.1.1动机
19.1.2opendir/readdir api
19.2分析直接使用api的代码
19.3unixstl∷readdir_sequence
19.3.1成员类型和成员常量
19.3.2构造
19.3.3元素迭代和集合大小相关的方法
19.3.4提取属性的方法
19.3.5const_iterator,版本1
19.3.6使用版本1
19.3.7const_iterator,版本2:复制语义
19.3.8operator++()
19.3.9迭代器类别和可适配的成员类型
19.3.10operator -]()
19.3.11支持fullpath和absolutepath标志
19.4其他的实现方法
19.4.1把迭代结果保存为快照
19.4.2把迭代结果保存为迭代器
19.5总结
第20章适配findfirstfile/findnextfile api
20.1介绍
20.1.1动机
20.1.2findfistfile/findnextfile api
20.2对例子的分解
20.2.1冗长版本
20.2.2精简版本
20.2.3重解析点和无限递归
20.3basic_findfile_sequence的设计
20.4winstl∷basic_findfile_sequence
20.4.1类的接口
20.4.2构造
20.4.3迭代
20.4.4如果编译器不支持异常
20.5winstl∷basic_findfile_sequence_const_iterator
20.5.1构造
20.5.2find_first_file_()
20.5.3operator ++()
20.6winstl∷basic_findfile_sequence_value_type
20.7垫片
20.8basic_findfile_sequence为什么不用垫片和构造函数模板
20.9小结
20.10结尾:用recls进行文件系统遍历
第21章插曲:枚举ftp服务器目录——保持效率和可用性的平衡
21.1inetstl∷basic_findfile_sequence
21.2inetstl∷basic_ftpdir_sequence
第22章遍历进程和模块
22.1集合的特征
22.2winstl∷pid_sequence
22.2.1基于组合的简单实现
22.2.2获取进程id
22.2.3没有异常支持时的工作方式
22.3winstl∷process_module_sequence
22.4枚举一个系统中的所有模块
22.5排除系统伪进程
22.6处理缺失api头文件的情况
22.7总结
第23章斐波那契序列
23.1简介
23.2斐波那契序列
23.3stl序列表示的斐波那契数列
23.3.1无限序列的接口
23.3.2为序列添加契约
23.3.3换用别的值类型
23.3.4对值类型进行约束
23.3.5抛出std∷overflow_error
23.4可发现性的欠缺
23.5定义有限上界
23.5.1最终还是要用迭代器
23.5.2由构造函数限定的区间
23.5.3true_typedefs
23.6小结
第24章适配mfc的carray容器族
24.1介绍
24.2动机
24.3模拟std∷vector
24.4设计时的考虑
24.4.1mfc的数组容器族
24.4.2carray_traits
24.4.3数组适配器类的设计
24.4.4以抽象方式操纵状态
24.4.5copy瞐nd瞫wap惯用法
24.4.6编写集合的接口
24.4.7教学方法
24.5mfcstl∷carray_adaptor_base的接口
24.6mfcstl∷carray_cadaptor
24.6.1模板声明和继承
24.6.2应用crtp
24.6.3carray_cadaptor的构造
24.6.4operator[]()
24.7mfcstl∷carray_iadaptor
24.8carray_adaptor_base的构造
24.9内存分配器
24.10元素访问方法
24.11元素迭代
24.11.1begin()和end()
24.11.2rbegin()和rend()
24.12和容器大小相关的方法
24.13容器容量相关的方法
24.14比较相关的方法
24.15修改容器结构的方法
24.15.1push_back()
24.15.2assign()
24.15.3pop_back()和clear()
24.15.4erase()..
24.15.5insert()
24.16赋值和swap()
24.17总结
24.18在cd上
第25章环境变量的map
25.1介绍
25.2动机
25.3getenv()、putenv()、setenv()/unsetenv()和environ
25.4platformstl∷enviroment_variable_traits
25.5规划接口
25.6通过名字查找
25.6.1选择1:返回固定/瞬时引用,指向一个缓存对象,具有最新值
25.6.2选择2:返回固定引用,指向一个缓存对象,具有快照值
25.6.3选择3:返回固定引用,指向一个缓存对象,具有最新值
25.6.4选择4:返回按值临时引用,具有最新值
25.6.5通过名字查找:尾声
25.7通过名字插入、更新和删除值
25.8迭代
25.8.1第1版:连续迭代器
25.8.2第2版:双向迭代器
25.8.3第3版:快照
25.8.4第4版:引用计数的快照
25.9最终的迭代实现
25.9.1可变的快照
25.9.2创建快照
25.9.3const_iterator嵌套类
25.9.4insert()方法
25.9.5erase()方法
25.9.6operator[]()和lookup()
25.9.7snapshot嵌套类
25.10异质的引用类别
25.11size()和下标索引
25.12总结
25.13在cd上
第26章在z平面上来回穿梭
26.1序言
26.2介绍
26.3第1版:前向迭代
26.3.1zorder_iterator,第1版
26.3.2window_peer_sequence,第1版
26.4第2版:双向迭代
26.5处理外部更改
26.6winstl∷child_window_sequence
26.7双向迭代器的蓝调音乐
26.7.1end()标记的陷阱
26.7.2致命的双重解引用
26.7.3当双向迭代器不是前向迭代器,而是可逆可复制迭代器
26.8winstl∷zorder_iterator:自身的反转
26.8.1zorder_iterator特征类
26.8.2zorder_iterator_tmpl[]
26.8.3反向的语义
26.9同级窗口序列的定稿
26.10总结
26.11z平面:尾声
第27章字符串分词
27.1介绍
27.2strtok()
27.3synesisstl∷stringtokeniser
27.4字符串分词的用例
27.5字符串分词的其他选择
27.5.1strtok_r()
27.5.2iostreams
27.5.3stlsoft∷find_next_token()
27.5.4boost∷tokenizer
27.6stlsoft∷string_tokeniser
27.6.1stlsoft∷string_tokeniser∷const_iterator
27.6.2确定迭代器类别和元素引用类别
27.6.3stlsoft∷string_tokeniser_type_traits
27.6.4stlsoft∷string_tokeniser_comparator
27.7测试代码
27.7.1以单个字符作为分隔符
27.7.2字符串作为分隔符
27.7.3保留空白字段
27.7.4复制还是引用:考虑使用“字符串视图”(string view)
27.7.5字符集作为分隔符
27.8愚蠢的策略类
27.8.1经由继承重构模板参数
27.8.2类型生成器模板
27.8.3关于henney假说
27.9性能
27.10总结
第28章适配com枚举器
28.1介绍
28.2动机
28.2.1冗长版
28.2.2短小版
28.3com枚举器
28.3.1ienumxxxx∷next()
28.3.2ienumxxxx∷skip()
28.3.3ienumxxxx∷reset()
28.3.4ienumxxxx∷clone()
28.3.5枚举器的各种值类型
28.4分解冗长版
28.5comstl∷enumerator_sequence
28.5.1enumerator_sequence的公共接口
28.5.2成员类型及成员常量
28.5.3值策略(value policies)
28.5.4成员变量
28.5.5构造函数
28.5.6迭代方法
28.5.7迭代器方法的const限定是错误的
28.5.8破坏了值语义
28.6comstl∷enumerator_sequence∷iterator
28.6.1构造
28.6.2迭代方法
28.6.3equal()
28.7comstl∷enumerator_sequence∷iterator∷enumeration_context
28.7.1为什么需要枚举上下文
28.7.2类定义
28.7.3构造
28.7.4迭代器的支持方法
28.7.5不变量
28.8迭代器复制策略
28.8.1comstl∷input_cloning_policy
28.8.2comstl∷forward_cloning_policy
28.8.3comstl∷cloneable_cloning_policy
28.9选择默认的复制策略:应用最小意外原则
28.10总结
28.10.1为什么不默认使用前向迭代器
28.10.2为什么不默认使用输入迭代器
28.10.3为什么不把q固定为1
28.10.4为什么不使用标准容器
28.11后文提要
第29章插曲:运用成员类型推断,纠正设计上的小疏忽
第30章适配com集合
30.1介绍
30.2动机
30.2.1冗长版
30.2.2简洁版
30.3comstl∷collection_sequence
30.3.1公有接口
30.3.2成员类型和常量
30.3.3构造
30.3.4迭代:干净地利用一个肮脏的把戏
30.3.5size()
30.4枚举器获取策略
30.5总结
第31章聚集分散的i/o
31.1介绍
31.2分散/聚集 i/o
31.3分散/聚集i/o api
31.3.1以com流实现线性化
31.3.2platformstl∷scatter_slice_sequence-预告
31.4适配ace_message_queue
31.4.1acestl∷message_queue_sequence,版本1
31.4.2acestl∷message_queue_sequence∷iterator
31.5吃蛋糕时间
31.5.1再快些
31.5.2acestl∷message_queue_sequence,版本2
31.5.3特化标准库
31.5.4性能
31.6总结
第32章根据参数返回不同类型
32.1介绍
32.2向ruby借颗宝石
32.3c++中的双语义下标
32.4通过字符串访问垫片扩大兼容性
32.5整数的美中不足
32.6选择返回类型和重载
32.7总结
第33章外部迭代器失效
33.1元素接口一致性
33.2windows的listbox和combobox控件
33.2.1提取元素的竞争条件
33.2.2winstl中的listbox_sequence和combobox_sequence类
33.3枚举注册表键和值
33.3.1那问题在哪
33.3.2winstl注册表库
33.3.3处理外部迭代器失效问题
33.3.4winstl∷basic_reg_key_sequence
33.4总结
33.5在cd上
第三部分迭代器
第34章增强版ostream_iterator
34.1介绍
34.2std∷ostream_iterator
34.3stlsoft∷ostream_iterator
34.3.1垫片的应用
34.3.2安全语义
34.3.3stlsoft∷ostream_iterator与std∷ostream_iterator的兼容性
34.3.4违反了设计原则吗
34.4定义流插入运算符
34.5小结
第35章插曲:借助解引用代理模式,消除笨拙的输出迭代器语法
第36章变换迭代器
36.1介绍
36.2动机
36.2.1使用std∷transform()的版本
36.2.2使用变换迭代器的版本
36.3定义迭代器适配器
36.3.1创建函数
36.3.2值类型
36.4stlsoft∷transform_iterator
36.4.1第一个版本
36.4.2构造
36.4.3自增、自减运算符和指针算术方法
36.4.4比较运算符和算术运算符
36.4.5问题在于
36.4.6第二个版本
36.4.7stlsoft∷transform_iterator
36.5复合变换
36.6违反了dry spot原则
36.6.1使用类型别名和非临时函数对象
36.6.2使用异质迭代器和算法
36.6.3接受现实,但小心谨慎
36.7没准sequence能帮上点忙
36.8小结
36.9cd上的内容
第37章插曲:命名时谨慎为好
第38章成员选取迭代器
38.1介绍
38.2动机
38.3stlsoft∷member_selector_iterator
38.4创建函数的悲哀
38.4.1以非变动性方式访问非常量数组
38.4.2以非变动性方式访问常量数组
38.4.3以变动性方式访问非常量数组
38.4.4通过迭代器类,以非变动性方式访问非常量集合
38.4.5通过迭代器类,以非变动性方式访问常量集合
38.4.6通过迭代器类,以变动性方式访问集合
38.4.7选取常量成员
38.5总结
38.6在cd上
第39章连接c风格字符串
39.1动机
39.2不灵活的版本
39.3stlsoft∷cstring_concatenator_iterator
39.4创建函数
39.5总结
39.6cd上的内容
第40章字符串对象的连接操作
40.1简介40.2stlsoft∷string_concatenator_iterator
40.3异质字符串类型的良好协作
40.4但是
40.4.1关于可赋值性
40.4.2悬空引用
40.4.3解决方案
40.5小结
第41章适配迭代器特征类
41.1introduction
41.2stlsoft∷adapted_iterator_traits
41.2.1iterator_category
41.2.2value_type
41.2.3difference_type
41.2.4pointer
41.2.5reference
41.2.6const_pointer和const_reference
41.2.7effective_reference和effective_const_reference
41.2.8effective_pointer和effective_const_pointer
41.2.9使用这个特征类
41.3小结
41.4cd上的内容
第42章过滤迭代
42.1介绍
42.2无效版
42.3用成员迭代器定义区间
42.4那么
42.5stlsoft∷filter_iterator
42.5.1前向迭代器语义
42.5.2双向迭代器语义
42.5.3随机访问迭代器语义
42.6限制迭代器的类别
42.7总结
42.8在cd上
第43章组合多个迭代器适配
43.1介绍
43.2转换筛选后的迭代器
43.3筛选转换后的迭代器
43.4两边下注
43.5总结
结语
参考书目...
Extended STL.Volume 1,Collections and iterators
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!
