网上购物 货比三家
您现在的位置:快乐比价网 > 图书 > 计算机与网络 > 程序设计 > 商品详情

STL扩展技术手册 卷I:集合和迭代器

分享到:
STL扩展技术手册 卷I:集合和迭代器

最 低 价:¥44.90

定 价:¥65.00

作 者:Matthew Wilson

出 版 社:机械工业出版社

出版时间:2008 年9月

I S B N:9787111242277

商品详情

编辑推荐

编写大部分的集合,并理解它们与容器的不同之处
  掌握元素参考类别:定义它们,检测它们,并利用它们设计STL扩展集合和迭代器
  与外部迭代器失效一起工作,并理解它对STL兼容集合的设计产生的令人惊讶的影响
  适配现实世界的API,包括从文件系统遍历到分散/聚集I/O
  使用独立迭代器类型,从简单的std::ostream_iterator扩展到复杂的过滤和转换类型或值的适配器

内容简介

本书以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扩展到复杂的过滤和转换类型或值的适配器。...

作者简介

Matthew Wilson,Synesis软件公司的软件开发顾问,STLSoft和Pantheios库的创建者,《Imperfect C++》(Addison-Wesley)的作者。他曾是《C/C++ Users Journal》(C/C++用户杂志)的专栏作家,也是一些主要出版物的撰稿者,具有15年以上的C++经验。他拥有英国曼彻斯特大学博士学位,目前定居在澳大利亚。


.. << 查看详细

目录

译者序.
前言
致谢
序言
编排体例
第一部分基础
第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andswap惯用法
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总结
结语
参考书目...

商品评论(0条)

暂无评论!

您的浏览历史

loading 内容加载中,请稍后...