编辑推荐
一本经久不衰的C 畅销经典教程;首本支持C 11新标准的程序设计图书。
它被誉为“开发人员学习C 的必备教程,没有之一”! Amazon网站“Language”类销售排名第三的超级畅销书,之前版本在美国销售超10万!
《C Primer Plus(第6版)中文版》可以说是一本面向从未学习过C语言甚至是从未学习过编程的人的入门书籍,它的首章从基础内容讲起,先介绍了传统编程的规则,后面才着重讲解有关面向对象——C 的精髓之一——的有关内容。整个书的结构安排较为合理,难度爬升较慢。
如果你是一个从未学过C语言(或者压根没学会C)的读者,那么,我相信这本书更适合你。
内容简介
C 是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。《C Primer Plus(第6版)中文版》是根据2003年的ISO/ANSI C 标准编写的,通过大量短小精悍的程序详细而全面地阐述了 C 的基本概念和技术,并专辟一章介绍了C 11新增的功能。
全书分18章和10个附录。分别介绍了C 程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C 11新增功能等内容。
《C Primer Plus(第6版)中文版》针对C 初学者,书中从C语言基础知识开始介绍,然后在此基础上详细阐述C 新增的特性,因此不要求读者有C语言方面的背景知识。本书可作为高等院校教授C 课程的教材,也可供初学者自学C 时使用。
作者简介
作者:(美国)蒂芬?普拉达(Stephen Prata)
蒂芬?普拉达(Stephen Prata),在美国加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工学院,在美国加州大学伯克利分校获得博士学位。他单独编写以及与他人合作编写的编程图书有十多本,其中包括C++Primer Plus和C Primer Plus,而且后者获得了计算机出版协会1990年度*How—to计算机图书奖。
目录
- 第1章 预备知识 1
- 1.1 C 简介 1
- 1.2 C 简史 2
- 1.2.1 C语言 2
- 1.2.2 C语言编程原理 2
- 1.2.3 面向对象编程 3
- 1.2.4 C 和泛型编程 4
- 1.2.5 C 的起源 4
- 1.3 可移植性和标准 5
- 1.3.1 C 的发展 6
- 1.3.2 本书遵循的C 标准 6
- 1.4 程序创建的技巧 6
- 1.4.1 创建源代码文件 7
- 1.4.2 编译和链接 8
- 1.5 总结 10
- 第2章 开始学习C 12
- 2.1 进入C 12
- 2.1.1 main()函数 13
- 2.1.2 C 注释 15
- 2.1.3 C 预处理器和iostream文件 16
- 2.1.4 头文件名 16
- 2.1.5 名称空间 17
- 2.1.6 使用cout进行C 输出 18
- 2.1.7 C 源代码的格式化 19
- 2.2 C 语句 21
- 2.2.1 声明语句和变量 21
- 2.2.2 赋值语句 22
- 2.2.3 cout的新花样 23
- 2.3 其他C 语句 23
- 2.3.1 使用cin 24
- 2.3.2 使用cout进行拼接 24
- 2.3.3 类简介 25
- 2.4 函数 26
- 2.4.1 使用有返回值的函数 26
- 2.4.2 函数变体 29
- 2.4.3 用户定义的函数 29
- 2.4.4 用户定义的有返回值的函数 32
- 2.4.5 在多函数程序中使用using编译指令 33
- 2.5 总结 34
- 2.6 复习题 35
- 2.7 编程练习 35
- 第3章 处理数据 37
- 3.1 简单变量 37
- 3.1.1 变量名 38
- 3.1.2 整型 39
- 3.1.3 整型short、int、long和long long 39
- 3.1.4 无符号类型 43
- 3.1.5 选择整型类型 45
- 3.1.6 整型字面值 45
- 3.1.7 C 如何确定常量的类型 47
- 3.1.8 char类型:字符和小整数 47
- 3.1.9 bool类型 53
- 3.2 const限定符 54
- 3.3 浮点数 55
- 3.3.1 书写浮点数 55
- 3.3.2 浮点类型 56
- 3.3.3 浮点常量 58
- 3.3.4 浮点数的优缺点 58
- 3.4 C 算术运算符 59
- 3.4.1 运算符优先级和结合性 60
- 3.4.2 除法分支 60
- 3.4.3 求模运算符 61
- 3.4.4 类型转换 62
- 3.4.5 C 11中的auto声明 66
- 3.5 总结 67
- 3.6 复习题 67
- 3.7 编程练习 68
- 第4章 复合类型 70
- 4.1 数组 70
- 4.1.1 程序说明 72
- 4.1.2 数组的初始化规则 73
- 4.1.3 C 11数组初始化方法 73
- 4.2 字符串 74
- 4.2.1 拼接字符串常量 75
- 4.2.2 在数组中使用字符串 76
- 4.2.3 字符串输入 77
- 4.2.4 每次读取一行字符串输入 78
- 4.2.5 混合输入字符串和数字 81
- 4.3 string类简介 82
- 4.3.1 C 11字符串初始化 83
- 4.3.2 赋值、拼接和附加 83
- 4.3.3 string类的其他操作 84
- 4.3.4 string类I/O 86
- 4.3.5 其他形式的字符串字面值 87
- 4.4 结构简介 88
- 4.4.1 在程序中使用结构 89
- 4.4.2 C 11结构初始化 91
- 4.4.3 结构可以将string类作为成员吗 91
- 4.4.4 其他结构属性 91
- 4.4.5 结构数组 93
- 4.4.6 结构中的位字段 94
- 4.5 共用体 94
- 4.6 枚举 95
- 4.6.1 设置枚举量的值 97
- 4.6.2 枚举的取值范围 97
- 4.7 指针和自由存储空间 97
- 4.7.1 声明和初始化指针 100
- 4.7.2 指针的危险 101
- 4.7.3 指针和数字 102
- 4.7.4 使用new来分配内存 102
- 4.7.5 使用delete释放内存 104
- 4.7.6 使用new来创建动态数组 104
- 4.8 指针、数组和指针算术 106
- 4.8.1 程序说明 107
- 4.8.2 指针小结 109
- 4.8.3 指针和字符串 111
- 4.8.4 使用new创建动态结构 114
- 4.8.5 自动存储、静态存储和动态存储 117
- 4.9 类型组合 118
- 4.10 数组的替代品 120
- 4.10.1 模板类vector 120
- 4.10.2 模板类array(C 11) 120
- 4.10.3 比较数组、vector对象和array对象 120
- 4.11 总结 122
- 4.12 复习题 123
- 4.13 编程练习 123
- 第5章 循环和关系表达式 125
- 5.1 for循环 125
- 5.1.1 for循环的组成部分 126
- 5.1.2 回到for循环 131
- 5.1.3 修改步长 132
- 5.1.4 使用for循环访问字符串 133
- 5.1.5 递增运算符( )和递减运算符(--) 133
- 5.1.6 副作用和顺序点 134
- 5.1.7 前缀格式和后缀格式 135
- 5.1.8 递增/递减运算符和指针 135
- 5.1.9 组合赋值运算符 136
- 5.1.10 复合语句(语句块) 136
- 5.1.11 其他语法技巧——逗号运算符 138
- 5.1.12 关系表达式 140
- 5.1.13 赋值、比较和可能犯的错误 141
- 5.1.14 C-风格字符串的比较 142
- 5.1.15 比较string类字符串 144
- 5.2 while循环 145
- 5.2.1 for与while 147
- 5.2.2 等待一段时间:编写延时循环 148
- 5.3 do while循环 150
- 5.4 基于范围的for循环(C 11) 152
- 5.5 循环和文本输入 152
- 5.5.1 使用原始的cin进行输入 152
- 5.5.2 使用cin.get(char)进行补救 153
- 5.5.3 使用哪一个cin.get() 154
- 5.5.4 文件尾条件 155
- 5.5.5 另一个cin.get()版本 157
- 5.6 嵌套循环和二维数组 159
- 5.6.1 初始化二维数组 160
- 5.6.2 使用二维数组 160
- 5.7 总结 162
- 5.8 复习题 163
- 5.9 编程练习 163
- 第6章 分支语句和逻辑运算符 165
- 6.1 if语句 165
- 6.1.1 if else语句 167
- 6.1.2 格式化if else语句 168
- 6.1.3 if else if else结构 169
- 6.2 逻辑表达式 170
- 6.2.1 逻辑OR运算符:|| 171
- 6.2.2 逻辑AND运算符:&& 172
- 6.2.3 用&&来设置取值范围 174
- 6.2.4 逻辑NOT运算符:! 175
- 6.2.5 逻辑运算符细节 176
- 6.2.6 其他表示方式 177
- 6.3 字符函数库cctype 177
- 6.4 ?:运算符 179
- 6.5 switch语句 180
- 6.5.1 将枚举量用作标签 183
- 6.5.2 switch和if else 184
- 6.6 break和continue语句 185
- 6.7 读取数字的循环 187
- 6.8 简单文件输入/输出 190
- 6.8.1 文本I/O和文本文件 190
- 6.8.2 写入到文本文件中 191
- 6.8.3 读取文本文件 194
- 6.9 总结 197
- 6.10 复习题 198
- 6.11 编程练习 199
- 第7章 函数——C 的编程模块 202
- 7.1 复习函数的基本知识 202
- 7.1.1 定义函数 203
- 7.1.2 函数原型和函数调用 205
- 7.2 函数参数和按值传递 207
- 7.2.1 多个参数 208
- 7.2.2 另外一个接受两个参数的函数 210
- 7.3 函数和数组 212
- 7.3.1 函数如何使用指针来处理数组 213
- 7.3.2 将数组作为参数意味着什么 213
- 7.3.3 更多数组函数示例 215
- 7.3.4 使用数组区间的函数 220
- 7.3.5 指针和const 221
- 7.4 函数和二维数组 224
- 7.5 函数和C-风格字符串 225
- 7.5.1 将C-风格字符串作为参数的函数 225
- 7.5.2 返回C-风格字符串的函数 227
- 7.6 函数和结构 228
- 7.6.1 传递和返回结构 228
- 7.6.2 另一个处理结构的函数示例 230
- 7.6.3 传递结构的地址 234
- 7.7 函数和string对象 235
- 7.8 函数与array对象 236
- 7.9 递归 238
- 7.9.1 包含一个递归调用的递归 239
- 7.9.2 包含多个递归调用的递归 240
- 7.10 函数指针 241
- 7.10.1 函数指针的基础知识 241
- 7.10.2 函数指针示例 243
- 7.10.3 深入探讨函数指针 244
- 7.10.4 使用typedef进行简化 248
- 7.11 总结 248
- 7.12 复习题 249
- 7.13 编程练习 250
- 第8章 函数探幽 253
- 8.1 C 内联函数 253
- 8.2 引用变量 255
- 8.2.1 创建引用变量 256
- 8.2.2 将引用用作函数参数 258
- 8.2.3 引用的属性和特别之处 260
- 8.2.4 将引用用于结构 263
- 8.2.5 将引用用于类对象 268
- 8.2.6 对象、继承和引用 271
- 8.2.7 何时使用引用参数 274
- 8.3 默认参数 274
- 8.4 函数重载 276
- 8.4.1 重载示例 278
- 8.4.2 何时使用函数重载 280
- 8.5 函数模板 281
- 8.5.1 重载的模板 283
- 8.5.2 模板的局限性 285
- 8.5.3 显式具体化 285
- 8.5.4 实例化和具体化 288
- 8.5.5 编译器选择使用哪个函数版本 289
- 8.5.6 模板函数的发展 295
- 8.6 总结 297
- 8.7 复习题 297
- 8.8 编程练习 298
- 第9章 内存模型和名称空间 300
- 9.1 单独编译 300
- 9.2 存储持续性、作用域和链接性 304
- 9.2.1 作用域和链接 305
- 9.2.2 自动存储持续性 305
- 9.2.3 静态持续变量 309
- 9.2.4 静态持续性、外部链接性 310
- 9.2.5 静态持续性、内部链接性 313
- 9.2.6 静态存储持续性、无链接性 315
- 9.2.7 说明符和限定符 317
- 9.2.8 函数和链接性 318
- 9.2.9 语言链接性 319
- 9.2.10 存储方案和动态分配 319
- 9.3 名称空间 324
- 9.3.1 传统的C 名称空间 324
- 9.3.2 新的名称空间特性 325
- 9.3.3 名称空间示例 331
- 9.3.4 名称空间及其前途 334
- 9.4 总结 335
- 9.5 复习题 335
- 9.6 编程练习 338
- 第10章 对象和类 340
- 10.1 过程性编程和面向对象编程 340
- 10.2 抽象和类 341
- 10.2.1 类型是什么 341
- 10.2.2 C 中的类 342
- 10.2.3 实现类成员函数 345
- 10.2.4 使用类 349
- 10.2.5 修改实现 350
- 10.2.6 小结 351
- 10.3 类的构造函数和析构函数 352
- 10.3.1 声明和定义构造函数 353
- 10.3.2 使用构造函数 354
- 10.3.3 默认构造函数 354
- 10.3.4 析构函数 355
- 10.3.5 改进Stock类 356
- 10.3.6 构造函数和析构函数小结 362
- 10.4 this指针 363
- 10.5 对象数组 368
- 10.6 类作用域 370
- 10.6.1 作用域为类的常量 371
- 10.6.2 作用域内枚举(C 11) 372
- 10.7 抽象数据类型 373
- 10.8 总结 376
- 10.9 复习题 377
- 10.10 编程练习 377
- 第11章 使用类 380
- 11.1 运算符重载 380
- 11.2 计算时间:一个运算符重载示例 381
- 11.2.1 添加加法运算符 384
- 11.2.2 重载限制 387
- 11.2.3 其他重载运算符 388
- 11.3 友元 390
- 11.3.1 创建友元 391
- 11.3.2 常用的友元:重载<<运算符 392>
- 11.4 重载运算符:作为成员函数还是非成员函数 397
- 11.5 再谈重载:一个矢量类 398
- 11.5.1 使用状态成员 404
- 11.5.2 为Vector类重载算术运算符 406
- 11.5.3 对实现的说明 408
- 11.5.4 使用Vector类来模拟随机漫步 408
- 11.6 类的自动转换和强制类型转换 411
- 11.6.1 转换函数 415
- 11.6.2 转换函数和友元函数 419
- 11.7 总结 421
- 11.8 复习题 422
- 11.9 编程练习 422
- 第12章 类和动态内存分配 425
- 12.1 动态内存和类 425
- 12.1.1 复习示例和静态类成员 425
- 12.1.2 特殊成员函数 432
- 12.1.3 回到Stringbad:复制构造函数的哪里出了问题 434
- 12.1.4 Stringbad的其他问题:赋值运算符 436
- 12.2 改进后的新String类 437
- 12.2.1 修订后的默认构造函数 438
- 12.2.2 比较成员函数 439
- 12.2.3 使用中括号表示法访问字符 439
- 12.2.4 静态类成员函数 441
- 12.2.5 进一步重载赋值运算符 441
- 12.3 在构造函数中使用new时应注意的事项 446
- 12.3.1 应该和不应该 447
- 12.3.2 包含类成员的类的逐成员复制 448
- 12.4 有关返回对象的说明 449
- 12.4.1 返回指向const对象的引用 449
- 12.4.2 返回指向非const对象的引用 449
- 12.4.3 返回对象 450
- 12.4.4 返回const对象 450
- 12.5 使用指向对象的指针 451
- 12.5.1 再谈new和delete 453
- 12.5.2 指针和对象小结 454
- 12.5.3 再谈定位new运算符 456
- 12.6 复习各种技术 459
- 12.6.1 重载<<运算符 459>
- 12.6.2 转换函数 460
- 12.6.3 其构造函数使用new的类 460
- 12.7 队列模拟 460
- 12.7.1 队列类 461
- 12.7.2 Customer类 468
- 12.7.3 ATM模拟 471
- 12.8 总结 475
- 12.9 复习题 476
- 12.10 编程练习 477
- 第13章 类继承 480
- 13.1 一个简单的基类 481
- 13.1.1 派生一个类 482
- 13.1.2 构造函数:访问权限的考虑 484
- 13.1.3 使用派生类 486
- 13.1.4 派生类和基类之间的特殊关系 488
- 13.2 继承:is-a关系 489
- 13.3 多态公有继承 490
- 13.4 静态联编和动态联编 501
- 13.4.1 指针和引用类型的兼容性 502
- 13.4.2 虚成员函数和动态联编 503
- 13.4.3 有关虚函数注意事项 505
- 13.5 访问控制:protected 507
- 13.6 抽象基类 508
- 13.6.1 应用ABC概念 510
- 13.6.2 ABC理念 516
- 13.7 继承和动态内存分配 516
- 13.7.1 第一种情况:派生类不使用new 516
- 13.7.2 第二种情况:派生类使用new 517
- 13.7.3 使用动态内存分配和友元的继承示例 519
- 13.8 类设计回顾 523
- 13.8.1 编译器生成的成员函数 523
- 13.8.2 其他的类方法 524
- 13.8.3 公有继承的考虑因素 527
- 13.8.4 类函数小结 530
- 13.9 总结 530
- 13.10 复习题 531
- 13.11 编程练习 531
- 第14章 C 中的代码重用 534
- 14.1 包含对象成员的类 534
- 14.1.1 valarray类简介 535
- 14.1.2 Student类的设计 535
- 14.1.3 Student类示例 537
- 14.2 私有继承 543
- 14.2.1 Student类示例(新版本) 543
- 14.2.2 使用包含还是私有继承 549
- 14.2.3 保护继承 549
- 14.2.4 使用using重新定义访问权限 550
- 14.3 多重继承 551
- 14.3.1 有多少Worker 555
- 14.3.2 哪个方法 558
- 14.3.3 MI小结 567
- 14.4 类模板 567
- 14.4.1 定义类模板 568
- 14.4.2 使用模板类 570
- 14.4.3 深入探讨模板类 572
- 14.4.4 数组模板示例和非类型参数 577
- 14.4.5 模板多功能性 578
- 14.4.6 模板的具体化 582
- 14.4.7 成员模板 584
- 14.4.8 将模板用作参数 586
- 14.4.9 模板类和友元 588
- 14.4.10 模板别名(C 11) 593
- 14.5 总结 594
- 14.6 复习题 595
- 14.7 编程练习 597
- 第15章 友元、异常和其他 602
- 15.1 友元 602
- 15.1.1 友元类 602
- 15.1.2 友元成员函数 606
- 15.1.3 其他友元关系 609
- 15.1.4 共同的友元 610
- 15.2 嵌套类 611
- 15.2.1 嵌套类和访问权限 612
- 15.2.2 模板中的嵌套 613
- 15.3 异常 616
- 15.3.1 调用abort() 616
- 15.3.2 返回错误码 617
- 15.3.3 异常机制 619
- 15.3.4 将对象用作异常类型 621
- 15.3.5 异常规范和C 11 624
- 15.3.6 栈解退 625
- 15.3.7 其他异常特性 629
- 15.3.8 exception类 631
- 15.3.9 异常、类和继承 634
- 15.3.10 异常何时会迷失方向 639
- 15.3.11 有关异常的注意事项 641
- 15.4 RTTI 642
- 15.4.1 RTTI的用途 642
- 15.4.2 RTTI的工作原理 642
- 15.5 类型转换运算符 649
- 15.6 总结 652
- 15.7 复习题 653
- 15.8 编程练习 654
- 第16章 string类和标准模板库 655
- 16.1 string类 655
- 16.1.1 构造字符串 655
- 16.1.2 string类输入 659
- 16.1.3 使用字符串 661
- 16.1.4 string还提供了哪些功能 665
- 16.1.5 字符串种类 666
- 16.2 智能指针模板类 667
- 16.2.1 使用智能指针 668
- 16.2.2 有关智能指针的注意事项 670
- 16.2.3 unique_ptr为何优于auto_ptr 672
- 16.2.4 选择智能指针 673
- 16.3 标准模板库 674
- 16.3.1 模板类vector 675
- 16.3.2 可对矢量执行的操作 676
- 16.3.3 对矢量可执行的其他操作 680
- 16.3.4 基于范围的for循环(C 11) 684
- 16.4 泛型编程 684
- 16.4.1 为何使用迭代器 685
- 16.4.2 迭代器类型 688
- 16.4.3 迭代器层次结构 689
- 16.4.4 概念、改进和模型 690
- 16.4.5 容器种类 695
- 16.4.4 关联容器 702
- 16.4.5 无序关联容器(C 11) 707
- 16.5 函数对象 707
- 16.5.1 函数符概念 707
- 16.5.2 预定义的函数符 710
- 16.5.3 自适应函数符和函数适配器 711
- 16.6 算法 713
- 16.6.1 算法组 713
- 16.6.2 算法的通用特征 714
- 16.6.3 STL和string类 715
- 16.6.4 函数和容器方法 716
- 16.6.5 使用STL 717
- 16.7 其他库 720
- 16.7.1 vector、valarray和array 720
- 16.7.2 模板initializer_list(C 11) 724
- 16.7.3 使用initializer_list 725
- 16.8 总结 727
- 16.9 复习题 728
- 16.10 编程练习 728
- 第17章 输入、输出和文件 731
- 17.1 C 输入和输出概述 731
- 17.1.1 流和缓冲区 732
- 17.1.2 流、缓冲区和iostream文件 733
- 17.1.3 重定向 735
- 17.2 使用cout进行输出 736
- 17.2.1 重载的<<运算符 736>
- 17.2.2 其他ostream方法 738
- 17.2.3 刷新输出缓冲区 740
- 17.2.4 用cout进行格式化 741
- 17.3 使用cin进行输入 753
- 17.3.1 cin>>如何检查输入 754
- 17.3.2 流状态 756
- 17.3.3 其他istream类方法 759
- 17.3.4 其他istream方法 764
- 17.4 文件输入和输出 768
- 17.4.1 简单的文件I/O 768
- 17.4.2 流状态检查和is_open() 770
- 17.4.3 打开多个文件 771
- 17.4.4 命令行处理技术 772
- 17.4.5 文件模式 773
- 17.4.6 随机存取 781
- 17.5 内核格式化 788
- 17.6 总结 790
- 17.7 复习题 791
- 17.8 编程练习 792
- 第18章 探讨C 新标准 795
- 18.1 复习前面介绍过的C 11功能 795
- 18.1.1 新类型 795
- 18.8.2 统一的初始化 795
- 18.1.3 声明 796
- 18.1.4 智能指针 798
- 18.1.5 异常规范方面的修改 798
- 18.1.6 作用域内枚举 799
- 18.1.7 对类的修改 799
- 18.1.8 模板和STL方面的修改 800
- 18.1.9 右值引用 801
- 18.2 移动语义和右值引用 802
- 18.2.1 为何需要移动语义 802
- 18.2.2 一个移动示例 803
- 18.2.3 移动构造函数解析 808
- 18.2.4 赋值 809
- 18.2.5 强制移动 809
- 18.3 新的类功能 813
- 18.3.1 特殊的成员函数 813
- 18.3.2 默认的方法和禁用的方法 814
- 18.3.3 委托构造函数 815
- 18.3.4 继承构造函数 815
- 18.3.5 管理虚方法:override和final 817
- 18.4 Lambda函数 817
- 18.4.1 比较函数指针、函数符和Lambda函数 818
- 18.4.2 为何使用lambda 820
- 18.5 包装器 822
- 18.5.1 包装器function及模板的低效性 823
- 18.5.2 修复问题 825
- 18.5.3 其他方式 826
- 18.6 可变参数模板 827
- 18.6.1 模板和函数参数包 827
- 18.6.2 展开参数包 828
- 18.6.3 在可变参数模板函数中使用递归 828
- 18.7 C 11新增的其他功能 831
- 18.7.1 并行编程 831
- 18.7.2 新增的库 831
- 18.7.3 低级编程 832
- 18.7.4 杂项 832
- 18.8 语言变化 832
- 18.8.1 Boost项目 833
- 18.8.2 TR1 833
- 18.8.3 使用Boost 833
- 18.9 接下来的任务 834
- 18.10 总结 834
- 18.11 复习题 835
- 18.12 编程练习 838
- 附录A 计数系统 839
- A.1 十进制数 839
- A.2 八进制整数 839
- A.3 十六进制数 839
- A.4 二进制数 840
- A.5 二进制和十六进制 841
- 附录B C 保留字 842
- B.1 C 关键字 842
- B.2 替代标记 842
- B.3 C 库保留名称 843
- B.4 有特殊含义的标识符 843
- 附录C ASCII字符集 845
- 附录D 运算符优先级 849
- 附录E 其他运算符 852
- E.1 按位运算符 852
- E.1.1 移位运算符 852
- E.1.2 逻辑按位运算符 853
- E.1.3 按位运算符的替代表示 855
- E.1.4 几种常用的按位运算符技术 856
- E.2 成员解除引用运算符 857
- E.3 alignof(C 11) 860
- E.4 noexcept(C 11) 861
- 附录F 模板类string 862
- F.1 13种类型和一个常量 862
- F.2 数据信息、构造函数及其他 863
- F.2.1 默认构造函数 865
- F.2.2 使用C-风格字符串的构造函数 865
- F.2.3 使用部分C-风格字符串的构造函数 865
- F.2.4 使用左值引用的构造函数 866
- F.2.5 使用右值引用的构造函数(C 11) 866
- F.2.6 使用一个字符的n个副本的构造函数 867
- F.2.7 使用区间的构造函数 867
- F.2.8 使用初始化列表的构造函数(C 11) 868
- F.2.9 内存杂记 868
- F.3 字符串存取 868
- F.4 基本赋值 869
- F.5 字符串搜索 869
- F.5.1 find()系列 870
- F.5.2 rfind()系列 870
- F.5.3 find_first_of()系列 870
- F.5.4 find_last_of()系列 871
- F.5.5 find_first_not_of()系列 871
- F.5.6 find_last_not_of()系列 871
- F.6 比较方法和函数 872
- F.7 字符串修改方法 873
- F.7.1 用于追加和相加的方法 873
- F.7.2 其他赋值方法 874
- F.7.3 插入方法 874
- F.7.4 清除方法 875
- F.7.5 替换方法 875
- F.7.6 其他修改方法:copy()和swap() 876
- F.8 输出和输入 876
- 附录G 标准模板库方法和函数 877
- G.1 STL和C 11 877
- G.1.1 新增的容器 877
- G.1.2 对C 98容器所做的修改 877
- G.2 大部分容器都有的成员 878
- G.3 序列容器的其他成员 881
- G.4 set和map的其他操作 883
- G.4 无序关联容器(C 11) 884
- G.5 STL函数 886
- G.5.1 非修改式序列操作 886
- G.5.2 修改式序列操作 890
- G.5.3 排序和相关操作 897
- G.5.4 数值运算 907
- 附录H 精选读物和网上资源 909
- H.1 精选读物 909
- H.2 网上资源 910
- 附录I 转换为ISO标准C 911
- I.1 使用一些预处理器编译指令的替代品 911
- I.1.1 使用const而不是#define来定义常量 911
- I.1.2 使用inline而不是#define来定义小型函数 912
- I.2 使用函数原型 913
- I.3 使用类型转换 913
- I.4 熟悉C 特性 913
- I.5 使用新的头文件 914
- I.6 使用名称空间 914
- I.7 使用智能指针 915
- I.8 使用string类 915
- I.9 使用STL 915
- 附录J 复习题答案 916
- 第2章复习题答案 916
- 第3章复习题答案 916
- 第4章复习题答案 917
- 第5章复习题答案 919
- 第6章复习题答案 919
- 第7章复习题答案 920
- 第8章复习题答案 922
- 第9章复习题答案 924
- 第10章复习题答案 925
- 第11章复习题答案 927
- 第12章复习题答案 927
- 第13章复习题答案 929
- 第14章复习题答案 930
- 第15章复习题答案 931
- 第16章复习题答案 932
- 第17章复习题答案 933
- 第18章复习题答案 935