Extended STL.Volume 1,Collections and iterators

副标题:无

作   者:Matthew Wilson著;金庆[等]译

分类号:

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总结

结语

参考书目...


已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

Extended STL.Volume 1,Collections and iterators
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    亲爱的云图用户,
    光盘内的文件都可以直接点击浏览哦

    无需下载,在线查阅资料!

    loading icon