图书介绍

STL扩展技术手册 卷1 集合和迭代器【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

STL扩展技术手册 卷1 集合和迭代器
  • 威尔森著,金庆等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111242277
  • 出版时间:2008
  • 标注页数:416页
  • 文件大小:106MB
  • 文件页数:446页
  • 主题词:C语言-程序设计-技术手册

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

STL扩展技术手册 卷1 集合和迭代器PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 基础2

第1章 标准模板库2

1.1核心概念2

1.2容器2

1.2.1序列容器2

1.2.2关联容器3

1.2.3存储空间的连续性3

1.2.4交换3

1.3迭代器3

1.3.1输入迭代器4

1.3.2输出迭代器5

1.3.3前向迭代器5

1.3.4双向迭代器5

1.3.5随机访问迭代器6

1.3.6成员选取运算符6

1.3.7预定义的迭代器适配器7

1.4算法8

1.5函数对象8

1.6分配器8

第2章 扩展STL:STL与真实世界的碰撞10

2.1术语10

2.2集合10

2.3迭代器12

2.3.1可变性12

2.3.2遍历12

2.3.3在编译期决定特性12

2.3.4元素引用类别12

2.3.5共享状态信息和独立状态信息12

2.3.6需要修改迭代器精化的分类吗13

第3章 元素引用类别15

3.1介绍15

3.2C++引用15

3.3元素引用类别的分类法16

3.3.1持久引用16

3.3.2固定引用17

3.3.3可失效引用17

3.3.4瞬时引用18

3.3.5按值临时引用19

3.3.6空引用20

3.4使用元素引用类别20

3.4.1在编译时检测引用类别20

3.4.2使用编译器帮助避免迭代器未定义行为21

3.5定义operator->()21

3.6元素引用类别:尾声22

第4章 奇异去临时引用23

第5章 DRYSPOT原则24

5.1C++编程中符合DRYSPOT的做法24

5.1.1常量24

5.1.2dimensionof()24

5.1.3创建函数25

5.2C++编程中不太符合DRYSPOT的做法25

5.2.1父类25

5.2.2函数返回类型26

5.3封闭的名字空间27

第6章 抽象泄漏法则28

第7章 契约式编程29

7.1强制的类型29

7.2强制的机制30

第8章 约束31

8.1利用C++类型系统31

8.2静态断言32

第9章 垫片33

9.1介绍33

9.2主要的垫片33

9.2.1属性垫片33

9.2.2转换垫片34

9.3复合垫片36

第10章 鸭规则和鹅规则:不完备结构一致性的发端39

10.1一致性39

10.1.1类型一致性39

10.1.2结构一致性40

10.1.3鸭规则和鹅规则41

10.2显式语义一致性42

10.2.1概念42

10.2.2给成员类型打标签43

10.2.3垫片44

10.3交集一致性44

第11章 资源获取即初始化45

11.1资源可变性45

11.2资源来源45

第12章 模板工具46

12.1特征类46

12.1.1base_type_traits47

12.1.2sign_traits48

12.1.3类型的特性:迷你特征49

12.1.4is_integral_type49

12.1.5is_signed_type50

12.1.6is_fundamental_type51

12.1.7is_same_type51

12.2类型生成器52

12.3真正的typedef52

第13章 推断式接口适配:编译时适配接口不全的类型54

13.1介绍54

13.2适配接口不全的类型54

13.3适配非变动性集合55

13.4推断式接口适配56

13.4.1类型选择57

13.4.2类型检测57

13.4.3类型修正58

13.5把IIA应用于区间60

第14章 Henney假说:当模板参数表太长61

第15章 通过equal()减少友元函数的使用63

15.1警惕非成员友元函数的滥用63

15.2集合及其迭代器65

第16章 基本组件66

16.1介绍66

16.2auto_buffer66

16.2.1它不是容器66

16.2.2类接口67

16.2.3复制68

16.2.4分配器宜最后68

16.2.5swap()68

16.2.6性能68

16.3filesystem_traits69

16.3.1成员类型69

16.3.2通用字符串处理69

16.3.3文件系统名字处理70

16.3.4文件系统状态操作71

16.3.5文件系统控制操作72

16.3.6返回类型和错误处理72

16.4file_path_buffer73

16.4.1basic74

16.4.2UNIX和PATHMAX74

16.4.3Windows和MAXPATH75

16.4.4缓冲区的使用76

16.5scoped_handle76

16.6dlcall()77

第二部分 集合81

第17章 适配globAPI81

17.1简介81

17.1.1动机81

17.1.2globAPI82

17.2解析使用原始API的版本84

17.3unixstl∷glob_sequence86

17.3.1公有接口86

17.3.2成员类型87

17.3.3成员变量87

17.3.4标志88

17.3.5构造90

17.3.6glob_sequence元素个数和元素访问91

17.3.7迭代91

17.3.8init_glob_()92

17.4解析使用glob-sequence实现的版本97

17.5小结97

第18章 插曲:构造函数冲突以及不良的设计99

第19章 适配opendir/readdirAPI101

19.1介绍101

19.1.1动机101

19.1.2opendir/readdirAPI102

19.2分析直接使用API的代码103

19.3unixstl∷readdir_sequence104

19.3.1成员类型和成员常量105

19.3.2构造106

19.3.3元素迭代和集合大小相关的方法106

19.3.4提取属性的方法107

19.3.5const_iterator,版本1107

19.3.6使用版本1111

19.3.7constiterator,版本2:复制语义111

19.3.8operator++()113

19.3.9迭代器类别和可适配的成员类型114

19.3.10operator->()114

19.3.11支持fullPath和absolutePath标志115

19.4其他的实现方法117

19.4.1把迭代结果保存为快照117

19.4.2把迭代结果保存为迭代器117

19.5总结118

第20章 适配FindFirstFile/FindNextFileAPI119

20.1介绍119

20.1.1动机119

20.1.2FindFistFile/FindNextFileAPI121

20.2对例子的分解123

20.2.1冗长版本123

20.2.2精简版本124

20.2.3重解析点和无限递归124

20.3basic_findfile_sequence的设计125

20.4winstl∷basic_findfile_sequence125

20.4.1类的接口126

20.4.2构造128

20.4.3迭代128

20.4.4如果编译器不支持异常129

20.5winstl∷basic_findfile_sequence_const_iterator131

20.5.1构造132

20.5.2find_first_file_()133

20.5.3operator++()135

20.6winstl∷basic_findfile_sequence_value_type141

20.7垫片142

20.8basic_findfile_sequence为什么不用垫片和构造函数模板143

20.9小结143

20.10结尾:用recls进行文件系统遍历144

第21章 插曲:枚举FTP服务器目录——保持效率和可用性的平衡145

21.1inetstl∷basic_findfile_sequence145

21.2inetstl∷basic_ftpdir_sequence147

第22章 遍历进程和模块149

22.1集合的特征149

22.2winstl∷pid_sequence149

22.2.1基于组合的简单实现150

22.2.2获取进程ID151

22.2.3没有异常支持时的工作方式152

22.3winstl∷process_module_sequence152

22.4枚举一个系统中的所有模块153

22.5排除系统伪进程154

22.6处理缺失API头文件的情况155

22.7总结156

第23章 斐波那契序列157

23.1简介157

23.2斐波那契序列157

23.3STL序列表示的斐波那契数列157

23.3.1无限序列的接口159

23.3.2为序列添加契约160

23.3.3换用别的值类型160

23.3.4对值类型进行约束160

23.3.5抛出std∷overflowerror161

23.4可发现性的欠缺161

23.5定义有限上界162

23.5.1最终还是要用迭代器162

23.5.2由构造函数限定的区间163

23.5.3True_Typedefs165

23.6小结167

第24章 适配MFC的CArray容器族168

24.1介绍168

24.2动机168

24.3模拟std∷vector170

24.4设计时的考虑171

24.4.1MFC的数组容器族172

24.4.2CArray_traits173

24.4.3数组适配器类的设计174

24.4.4以抽象方式操纵状态174

24.4.5Copy-and-Swap惯用法174

24.4.6编写集合的接口175

24.4.7教学方法175

24.5mfcstl∷CArray_adaptor_base的接口176

24.6mfcstl∷CArray_cadaptor177

24.6.1模板声明和继承178

24.6.2应用CRTP178

24.6.3CArray_cadaptor的构造179

24.6.4operator[]()180

24.7mfcstl∷CArray_iadaptor181

24.8CArray_adaptor_base的构造182

24.9内存分配器182

24.10元素访问方法182

24.11元素迭代183

24.11.1begin()和end()183

24.11.2rbegin()和rend()183

24.12和容器大小相关的方法184

24.13容器容量相关的方法187

24.14比较相关的方法187

24.15修改容器结构的方法190

24.15.1push_back()190

24.15.2assign()191

24.15.3popback()和clear()192

24.15.4erase()192

24.15.5insert()193

24.16赋值和swap()194

24.17总结196

24.18在CD上197

第25章 环境变量的map198

25.l介绍198

25.2动机198

25.3getenv()、putenv()、setenv()/unsetenv()和environ198

25.4platformstl∷enviroment_variable_traits199

25.5规划接口201

25.6通过名字查找201

25.6.1选择1:返回固定/瞬时引用,指向一个缓存对象,具有最新值202

25.6.2选择2:返回固定引用,指向一个缓存对象,具有快照值203

25.6.3选择3:返回固定引用,指向一个缓存对象,具有最新值204

25.6.4选择4:返回按值临时引用,具有最新值205

25.6.5通过名字查找:尾声206

25.7通过名字插入、更新和删除值206

25.8迭代206

25.8.1第1版:连续迭代器207

25.8.2第2版:双向迭代器207

25.8.3第3版:快照209

25.8.4第4版:引用计数的快照211

25.9最终的迭代实现212

25.9.1可变的快照213

25.9.2创建快照214

25.9.3constiterator嵌套类215

25.9.4insert()方法216

25.9.5erase()方法217

25.9.6operator[]()和lookup()218

25.9.7snapshot嵌套类219

25.10异质的引用类别220

25.11size()和下标索引220

25.12总结221

25.13在CD上221

第26章 在Z平面上来回穿梭222

26.1序言222

26.2介绍222

26.3第1版:前向迭代224

26.3.1zorderiterator,第1版224

26.3.2window_peer_sequence,第1版225

26.4第2版:双向迭代226

26.5处理外部更改227

26.6winstl∷child_window_sequence229

26.7双向迭代器的蓝调音乐230

26.7.1end()标记的陷阱230

26.7.2致命的双重解引用231

26.7.3当双向迭代器不是前向迭代器,而是可逆可复制迭代器232

26.8winstl∷zorderiterator:自身的反转233

26.8.1zorder_iterator特征类234

26.8.2zorder_iteratortmpl<>235

26.8.3反向的语义238

26.9同级窗口序列的定稿238

26.10总结239

26.11Z平面:尾声240

第27章 字符串分词241

27.1介绍241

27.2strtok()241

27.3SynesisSTL∷StringTokeniser243

27.4字符串分词的用例244

27.5字符串分词的其他选择245

27.5.1strtok_r()245

27.5.2IOStreams245

27.5.3stlsoft∷find_next_token()245

27.5.4boost∷tokenizer245

27.6stlsoft∷string_tokeniser246

27.6.1stlsoft∷string_tokeniser∷const_iterator248

27.6.2确定迭代器类别和元素引用类别250

27.6.3stlsoft∷stringtokeniser_type-traits250

27.6.4stlsoft∷string_tokeniser_comparator251

27.7测试代码253

27.7.1以单个字符作为分隔符253

27.7.2字符串作为分隔符254

27.7.3保留空白字段254

27.7.4复制还是引用:考虑使用“字符串视图”(StringView)254

27.7.5字符集作为分隔符256

27.8愚蠢的策略类256

27.8.1经由继承重构模板参数257

27.8.2类型生成器模板258

27.8.3关于Henney假说258

27.9性能258

27.10总结261

第28章 适配COM枚举器262

28.1介绍262

28.2动机262

28.2.1冗长版262

28.2.2短小版263

28.3COM枚举器264

28.3.1IEnumXXXX∷Next()264

28.3.2IEnumXXXX∷Skip()264

28.3.3IEnumXXXX∷Reset()264

28.3.4IEnumXXXX∷Clone()264

28.3.5枚举器的各种值类型264

28.4分解冗长版265

28.5comstl∷enumerator_sequence266

28.5.1enumerator_sequence的公共接口266

28.5.2成员类型及成员常量267

28.5.3值策略(ValuePolicies)267

28.5.4成员变量270

28.5.5构造函数270

28.5.6迭代方法271

28.5.7迭代器方法的const限定是错误的272

28.5.8破坏了值语义272

28.6comstl∷enumerator_sequence∷iterator273

28.6.1构造274

28.6.2迭代方法275

28.6.3equal()275

28.7comstl∷enumerator_sequence∷iterator∷enumeration_context276

28.7.1为什么需要枚举上下文276

28.7.2类定义277

28.7.3构造277

28.7.4迭代器的支持方法281

28.7.5不变量282

28.8迭代器复制策略283

28.8.1comstl∷input_cloning_policy283

28.8.2comstl∷forward_cloning_policy284

28.8.3comstl∷cloneable_cloning_policy285

28.9选择默认的复制策略:应用最小意外原则286

28.10总结290

28.10.1为什么不默认使用前向迭代器290

28.10.2为什么不默认使用输入迭代器290

28.10.3为什么不把Q固定为1290

28.10.4为什么不使用标准容器290

28.11后文提要290

第29章 插曲:运用成员类型推断,纠正设计上的小疏忽291

第30章 适配COM集合292

30.1介绍292

30.2动机292

30.2.1冗长版292

30.2.2简洁版294

30.3comstl∷collection_sequence295

30.3.1公有接口295

30.3.2成员类型和常量296

30.3.3构造296

30.3.4迭代:干净地利用一个肮脏的把戏296

30.3.5size()298

30.4枚举器获取策略299

30.5总结301

第31章 聚集分散的I/O302

31.1介绍302

31.2分散/聚集I/O302

31.3分散/聚集I/OAPI303

31.3.1以COM流实现线性化303

31.3.2Platformstl∷scatterslicesequence-预告305

31.4适配ACE_Message_Queue307

31.4.1acestl∷message_queue_sequence,版本1308

31.4.2acestl∷message_queue_sequence∷iterator308

31.5吃蛋糕时间312

31.5.1再快些312

31.5.2acestl∷message_queue_sequence,版本2312

31.5.3特化标准库314

31.5.4性能316

31.6总结317

第32章 根据参数返回不同类型318

32.1介绍318

32.2向Ruby借颗宝石318

32.3C++中的双语义下标319

32.4通过字符串访问垫片扩大兼容性320

32.5整数的美中不足321

32.6选择返回类型和重载322

32.7总结322

第33章 外部迭代器失效324

33.1元素接口一致性324

33.2Windows的ListBox和ComboBox控件325

33.2.1提取元素的竞争条件326

33.2.2WinSTL中的listbox_sequence和combobox_sequence类327

33.3枚举注册表键和值331

33.3.1那问题在哪332

33.3.2WinSTL注册表库334

33.3.3处理外部迭代器失效问题334

33.3.4winstl∷basic_reg_key_sequence336

33.4总结345

33.5在CD上345

第三部分 迭代器348

第34章 增强版ostream_iterator348

34.1介绍348

34.2std∷ostreamiterator349

34.3stlsoft∷ostreamiterator350

34.3.1垫片的应用352

34.3.2安全语义352

34.3.3stlsoft∷ostream_iterator与std∷ostream-iterator的兼容性353

34.3.4违反了设计原则吗354

34.4定义流插入运算符354

34.5小结355

第35章 插曲:借助解引用代理模式,消除笨拙的输出迭代器语法356

第36章 变换迭代器359

36.1介绍359

36.2动机360

36.2.1使用std∷transform()的版本360

36.2.2使用变换迭代器的版本361

36.3定义迭代器适配器362

36.3.1创建函数362

36.3.2值类型363

36.4stlsoft∷transformiterator363

36.4.1第一个版本363

36.4.2构造365

36.4.3自增、自减运算符和指针算术方法365

36.4.4比较运算符和算术运算符365

36.4.5问题在于366

36.4.6第二个版本367

36.4.7stlsoft∷transform_iterator369

36.5复合变换370

36.6违反了DRYSPOT原则371

36.6.1使用类型别名和非临时函数对象371

36.6.2使用异质迭代器和算法372

36.6.3接受现实,但小心谨慎374

36.7没准Sequence能帮上点忙374

36.8小结375

36.9CD上的内容375

第37章 插曲:命名时谨慎为好376

第38章 成员选取迭代器378

38.1介绍378

38.2动机378

38.3stlsoft∷member_selector_iterator380

38.4创建函数的悲哀382

38.4.1以非变动性方式访问非常量数组382

38.4.2以非变动性方式访问常量数组382

38.4.3以变动性方式访问非常量数组383

38.4.4通过迭代器类,以非变动性方式访问非常量集合383

38.4.5通过迭代器类,以非变动性方式访问常量集合383

38.4.6通过迭代器类,以变动性方式访问集合385

38.4.7选取常量成员385

38.5总结386

38.6在CD上386

第39章 连接C风格字符串387

39.1动机387

39.2不灵活的版本387

39.3stlsoft∷cstring_concatenator_iterator389

39.4创建函数391

39.5总结391

39.6CD上的内容392

第40章 字符串对象的连接操作393

40.1简介393

40.2stlsoft∷string_concatenatoriterator393

40.3异质字符串类型的良好协作395

40.4但是396

40.4.1关于可赋值性396

40.4.2悬空引用396

40.4.3解决方案396

40.5小结397

第41章 适配迭代器特征类398

41.1Introduction398

41.2stlsoft∷adapted_iterator_traits398

41.2.1iterator-category400

41.2.2value-type400

41.2.3differencetype400

41.2.4pointer401

41.2.5reference401

41.2.6const_pointer和const_reference402

41.2.7effective-reference和effective_const_reference402

41.2.8effective_pointer和effective_const_pointer403

41.2.9使用这个特征类403

41.3小结404

41.4CD上的内容404

第42章 过滤迭代405

42.1介绍405

42.2无效版405

42.3用成员迭代器定义区间406

42.4那么406

42.5stlsoft∷filteriterator407

42.5.1前向迭代器语义407

42.5.2双向迭代器语义409

42.5.3随机访问迭代器语义410

42.6限制迭代器的类别410

42.7总结411

42.8在CD上411

第43章 组合多个迭代器适配412

43.1介绍412

43.2转换筛选后的迭代器412

43.3筛选转换后的迭代器413

43.4两边下注414

43.5总结414

结语415

参考书目416

热门推荐