当前位置:首页 > 工业技术
STL源码剖析
STL源码剖析

STL源码剖析PDF电子书下载

工业技术

  • 电子书积分:15 积分如何计算积分?
  • 作 者:侯捷著
  • 出 版 社:武汉:华中科技大学出版社
  • 出版年份:2002
  • ISBN:7560926991
  • 页数:494 页
图书介绍:学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;甚至还能够看到底层的memory pool和高阶抽象的traits机制的实现。
《STL源码剖析》目录
标签:剖析 源码

第1章 STL 概论与版本简介 1

1.1 STL概论 1

1.1.1 STL的历史 3

1.1.2 STL与C++标准程序库 3

1.2 STL六大组件 功能与运用 4

1.3 GNU源代码开放精神 7

1.4 HP实现版本 9

1.5 P.J.Plauger实现版本 10

1.6 Rouge Wave实现版本 11

1.7 STLport实现版本 12

1.8 SGI STL实现版本 13

1.8.1 GNU C++headers文件分布(按字母排序) 14

1.8.2 SGI STL文件分布与简介 16

(1)STL标准头文件(无扩展名) 17

(2)C++Standard定案前,HP规范的STL头文件(扩展名.h) 17

(3)SGI STL 内部私用文件(SGI STL真正实现于此) 18

1.8.3 SGI STL的编译器组态设置(configuration) 19

1.9 可能令你困惑的C++ 语法 26

1.9.1 stl_config.h中的各种组态 27

组态3:static template member 27

组态5:class template partial specialization 28

组态6:function template partial order 29

组态7:explicit function template arguments 29

组态8:member templates 29

组态10:default template argument depend on previous template parameters 30

组态11:non-type template parameters 31

组态:bound friend template function 32

组态:class template explicit specialization 34

1.9.2 临时对象的产生与运用 36

1.9.3 静态常量整数成员在class内部直接初始化 37

1.9.4 increment/decrement/dereference 操作符 37

1.9.5 前闭后开区间表示法? 39

1.9.6 function call操作符(operator()) 40

第2章 空间配置器(allocator) 43

2.1 空间配置器的标准接口 43

2.1.1 设计一个简单的空间配置器,JJ::allocator 44

2.2 具备次配置力(sub-allocation)的SGI空间配置器 47

2.2.1 SGI标准的空间配置器,std::allocator 47

2.2.2 SGI特殊的空间配置器,std::alloc 49

2.2.3 构造和析构基本工具:construct()和destroy() 51

2.2.4 空间的配置与释放,std::alloc 53

2.2.5 第一级配置器_malloc_alloc_template剖析 56

2.2.6 第二级配置器_default_alloc_template剖析 59

2.2.7 空间配置函数allocate() 62

2.2.8 空间释放函数deallocate() 64

2.2.9 重新充填free lists 65

2.2.10 内存池(memory pool) 66

2.3 内存基本处理工具 70

2.3.1 uninitialized_copy 70

2.3.2 uninitialized_fill 71

2.3.3 uninitialized_fill_n 71

第3章 迭代器(iterators)概念与traits编程技法 79

3.1 迭代器设计思维——STL关键所在 79

3.2 迭代器(iterator)是一种smart pointer 80

3.3 迭代器相应型别(associated types) 84

3.4 Traits编程技法——STL源代码门钥 85

Partial Specialization(偏特化)的意义 86

3.4.1 迭代器相应型别之一:value_type 90

3.4.2 迭代器相应型别之二:difference_type 90

3.4.3 迭代器相应型别之三:reference_type 91

3.4.4 迭代器相应型别之四:pointer_type 91

3.4.5 迭代器相应型别之五:iterator_category 92

以advanced()为例 93

消除“单纯传递调用的函数” 97

以distance()为例 98

3.5 std::iterator的保证 99

3.6 iterator源代码完整重列 101

3.7 SGI STL的私房菜:_type_traits 103

第4章 序列式容器(sequence containers) 113

4.1 容器的概观与分类 113

4.1.1 序列式容器(sequential containers) 114

4.2 vector 115

4.2.1 vector概述 115

4.2.2 vector定义摘要 115

4.2.3 vector的迭代器 117

4.2.4 vector的数据结构 118

4.2.5 vector的构造与内存管理:constructor,push_back 119

4.2.6 vector的元素操作:pop_back,erase,clear,insert 123

4.3 list 128

4.3.1 list概述 128

4.3.2 list的节点(node) 129

4.3.3 list的迭代器 129

4.3.4 list的数据结构 131

4.3.5 list的构造与内存管理:constructor,push_back,insert 132

4.3.6 list的元素操作:push_front,push_back,erase,pop_front,pop_back,clear,remove,unique,splice,merge,reverse,sort 136

4.4 deque 143

4.4.1 deque概述 143

4.4.2 deque的中控器 144

4.4.3 deque的迭代器 146

4.4.4 deque的数据结构 150

4.4.5 deque的构造与内存管理ctor,push_back,push_front 152

4.4.6 deque的元素操作pop_back,pop_front,clear,erase,insert 161

4.5 stack 167

4.5.1 stack概述 167

4.5.2 stack定义完整列表 167

4.5.3 stack没有迭代器 168

4.5.4 以list作为stack的底层容器 168

4.6 queue 169

4.6.1 queue概述 169

4.6.2 queue定义完整列表 170

4.6.3 queue没有迭代器 171

4.6.4 以list作为queue的底层容器 171

4.7 heap(隐式表述,implicit representation) 172

4.7.1 heap概述 172

4.7.2 heap算法 174

push_heap算法 174

pop_heap算法 176

sort_heap算法 178

make heap算法 180

4.7.3 heap没有迭代器 181

4.7.4 heap测试实例 181

4.8 priority_queue 183

4.8.1 priority_queue概述 183

4.8.2 priority_queue定义完整列表 183

4.8.3 priority_queue没有迭代器 185

4.8.4 priority_queue测试实例 185

4.9 slist 186

4.9.1 slist概述 186

4.9.2 slist的节点 186

4.9.3 slist的迭代器 188

4.9.4 slist的数据结构 190

4.9.5 slist的元素操作 191

第5章 关联式容器 197

5.1 树的导览 199

5.1.1 二叉搜索树 200

5.1.2 平衡二叉搜索树 203

5.1.3 AVL tree 203

5.1.4 单旋转 205

5.1.5 双旋转 206

5.2 RB-tree(红黑树) 208

5.2.1 插入节点 209

5.2.2 一个由上而下的程序 212

5.2.3 RB-tree的节点设计 213

5.2.4 RB-tree的迭代器 214

5.2.5 RB-tree的数据结构 218

5.2.6 RB-tree的构造与内存管理 221

5.2.7 RB-tree的元素操作 223

元素插人操作insert_equal() 223

元素插入操作insert_unique() 224

真正的插入执行程序_insert() 224

调整RB-tree(旋转及改变颜色) 225

元素的搜寻 229

5.3 set 233

5.4 map 237

5.5 multiset 245

5.6 multimap 246

5.7 hashtable 247

5.7.1 hashtable概述 247

线性探测(linear probing) 249

二次探测(quadratic probing) 251

开链(separate chaining) 253

5.7.2 hashtable的桶子(buckets)与节点(nodes) 253

5.7.3 hashtable的迭代器 254

5.7.4 hashtable的数据结构 256

5.7.5 hashtable的构造与内存管理 258

插入操作(insert)与表格重整(resize) 259

判知元素的落脚处(bkt_num) 262

复制(copy_from)和整体删除(clear) 263

5.7.6 hashtable运用实例 264

5.7.7 hash functions 268

5.8 hash_set 270

5.9 hash_map 275

5.10 hash_multiset 279

5.11 hash_multimap 282

第6章 算法(algorithms) 285

6.1 算法概观 285

6.1.1 算法分析与复杂度表示O() 286

6.1.2 STL算法总览 288

6.1.3 质变算法mutating algorithms——会改变操作对象之值 291

6.1.4 非质变算法nonmutating algorithms——不改变操作对象之值 292

6.1.5 STL算法的一般形式 292

6.2 算法的泛化过程 294

6.3 数值算法<stl_numeric.h> 298

6.3.1 运用实例 298

6.3.2 accumulate 299

6.3.3 adjacent_difference 300

6.3.4 inner_product 301

6.3.5 partial_sum 303

6.3.6 power 304

6.3.7 itoa 305

6.4 基本算法<stl_algobase.h> 305

6.4.1 运用实例 305

6.4.2 equal 307

fill 308

fill_n 308

iter_swap 309

lexicographical_compare 310

max,min 312

mismatch 313

swap 314

6.4.3 copy——强化效率无所不用其极 314

6.4.4 copy_backward 326

6.5 Set相关算法 328

6.5.1 set_union 331

6.5.2 set_intersection 333

6.5.3 set_difference 334

6.5.4 set_symmetric_difference 336

6.6 heap算法 338

6.7 其它算法 338

6.7.1 单纯的数据处理 338

adjacent_find 343

count 344

count_if 344

find 345

find_it 345

find_end 345

find_first_of 348

for_each 348

generate 349

generate_n 349

includes(应用于有序区间) 349

max_element 352

merge(应用于有序区间) 352

min_element 354

partition 354

remove移除(但不删除) 356

remove_copy 357

remove_if 357

remove_copy_if 358

replace 359

replace_copy 359

replace_if 359

replace_copy_if 360

reverse 360

reverse_copy 361

rotate 361

rotate_copy 365

search 365

search_n 366

swap_ranges 369

transform 369

unique 370

unique_copy 371

6.7.2 lower_bound(应用于有序区间) 375

6.7.3 upper_bound(应用于有序区间) 377

6.7.4 binary_search(应用于有序区间) 379

6.7.5 next_permutation 380

6.7.6 prev_permutation 382

6.7.7 random_shuffle 383

6.7.8 partial_sort/partial_sort_copy 386

6.7.9 sort 389

6.7.10 equal_range(应用于有序区间) 400

6.7.11 inplace_merge(应用于有序区间) 403

6.7.12 nth_element 409

6.7.13 merge sort 411

第7章 仿函数(functors,另名 函数对象function objects) 413

7.1 仿函数(functor)概观 413

7.2 可配接(adaptable)的关键 415

7.2.1 unary_function 416

7.2.2 binary_function 417

7.3 算术类(Arithmetic)仿函数 418

7.4 关系运算类(Relational)仿函数 420

7.5 逻辑运算类(Logical)仿函数 422

7.6 证同(identity)、选择(select)、投射(project) 423

第8章 配接器(adapters) 425

8.1 配接器之概观与分类 425

8.1.1 应用于容器,container adapters 425

8.1.2 应用于迭代器,iterator adapters 425

8.1.3 应用于仿函数,functor adapters 428

8.2 container adapters 434

8.2.1 stack 434

8.2.2 queue 434

8.3 iterator adapters 435

8.3.1 insert iterators 435

8.3.2 reverse iterators 437

8.3.3 stream iterators 442

8.4 function adapters 448

8.4.1 对返回值进行逻辑否定:not1,not2 450

8.4.2 对参数进行绑定:bindlst,bind2nd 451

8.4.3 用于函数合成:compose1,compose2 453

8.4.4 用于函数指针:ptr_fun 454

8.4.5 用于成员函数指针:mem_fun,mem_fun_ref 456

附录A 参考书籍与推荐读物(Bibliography) 461

附录B 侯捷网站(本书支持站点简介) 471

附录C STLPort的移植经验(by 孟岩) 475

Borland C++Builder5 476

Microsoft Visual C++6.0 479

索引 483

相关图书
作者其它书籍
返回顶部