C++程序设计:原理与实践(进阶篇)(原书第2版)

Book description

C++之父Bjarne Stroustrup经典著作《C++程序设计:原理与实践(原书第2版)》基于最新的C++11和C++14,广泛地介绍了程序设计的基本概念和技术,包括类型系统、算术运算、控制结构、错误处理等;介绍了从键盘和文件获取数值和文本数据的方法以及以图形化方式表示数值数据、文本和几何图形;介绍了C++标准库中的容器(如向量、列表、映射)和算法(如排序、查找和内积)的设计和使用。同时还对C++思想和历史进行了详细的讨论,很好地拓宽了读者的视野。为方便读者循序渐进地学习,加上篇幅所限,《C++程序设计:原理与实践(原书第2版)》分为基础篇和进阶篇两册出版,基础篇包括第1~11章、第17~19章和附录A、C,进阶篇包括第12~16章、第20~27章和附录B、D、E。本书是进阶篇。本书通俗易懂、实例丰富,可作为大学计算机、电子工程、信息科学等相关专业的教材,也可供相关专业人员参考。

Table of contents

  1. 出版者的话
  2. 译者序
  3. 前言
  4. 引言
  5. 作者简介
  6. 第15章 容器和迭代器
    1. 15.1 存储和处理数据
      1. 15.1.1 处理数据
      2. 15.1.2 泛化代码
    2. 15.2 STL理念
    3. 15.3 序列和迭代器
      1. 15.3.1 回到实例
    4. 15.4 链表
      1. 15.4.1 链表操作
      2. 15.4.2 遍历
    5. 15.5 再次泛化vector
      1. 15.5.1 遍历容器
      2. 15.5.2 auto
    6. 15.6 实例:一个简单的文本编辑器
      1. 15.6.1 处理行
      2. 15.6.2 遍历
    7. 15.7 vector、list和string
      1. 15.7.1 insert和erase
    8. 15.8 调整vector类达到STL版本的功能
    9. 15.9 调整内置数组达到STL版本的功能
    10. 15.10 容器概览
      1. 15.10.1 迭代器类别
    11. 简单练习
    12. 思考题
    13. 术语
    14. 习题
    15. 附言
  7. 第16章 算法和映射
    1. 16.1 标准库算法
    2. 16.2 最简单的算法find()
      1. 16.2.1 一些一般的应用
    3. 16.3 通用搜索算法find_if()
    4. 16.4 函数对象
      1. 16.4.1 函数对象的抽象视图
      2. 16.4.2 类成员上的断言
      3. 16.4.3 lambda表达式
    5. 16.5 数值算法
      1. 16.5.1 累积
      2. 16.5.2 泛化accumulate()
      3. 16.5.3 内积
      4. 16.5.4 泛化inner_product()
    6. 16.6 关联容器
      1. 16.6.1 map
      2. 16.6.2 map概览
      3. 16.6.3 另一个map实例
      4. 16.6.4 unordered_map
      5. 16.6.5 set
    7. 16.7 拷贝
      1. 16.7.1 基本拷贝算法
      2. 16.7.2 流迭代器
      3. 16.7.3 使用set保持顺序
      4. 16.7.4 copy_if
    8. 16.8 排序和搜索
    9. 16.9 容器算法
    10. 简单练习
    11. 思考题
    12. 术语
    13. 习题
    14. 附言
  8. 第17章 一个显示模型
    1. 17.1 为什么要使用图形
    2. 17.2 一个基本显示模型
    3. 17.3 第一个例子
    4. 17.4 使用GUI库
    5. 17.5 坐标系
    6. 17.6 Shape
    7. 17.7 使用Shape类
      1. 17.7.1 图形头文件和主函数
      2. 17.7.2 一个几乎空白的窗口
      3. 17.7.3 坐标轴
      4. 17.7.4 绘制函数图
      5. 17.7.5 Polygon
      6. 17.7.6 Rectangle
      7. 17.7.7 填充
      8. 17.7.8 Text
      9. 17.7.9 Image
      10. 17.7.10 更多未讨论的内容
    8. 17.8 让图形程序运行起来
      1. 17.8.1 源文件
    9. 简单练习
    10. 思考题
    11. 术语
    12. 习题
    13. 附言
  9. 第18章 图形类
    1. 18.1 图形类概览
    2. 18.2 Point和Line
    3. 18.3 Lines
    4. 18.4 Color
    5. 18.5 Line_style
    6. 18.6 Open_polyline
    7. 18.7 Closed_polyline
    8. 18.8 Polygon
    9. 18.9 Rectangle
    10. 18.10 管理未命名对象
    11. 18.11 Text
    12. 18.12 Circle
    13. 18.13 Ellipse
    14. 18.14 Marked_polyline
    15. 18.15 Marks
    16. 18.16 Mark
    17. 18.17 Image
    18. 简单练习
    19. 思考题
    20. 术语
    21. 习题
    22. 附言
  10. 第19章 设计图形类
    1. 19.1 设计原则
      1. 19.1.1 类型
      2. 19.1.2 操作
      3. 19.1.3 命名
      4. 19.1.4 可变性
    2. 19.2 Shape
      1. 19.2.1 一个抽象类
      2. 19.2.2 访问控制
      3. 19.2.3 绘制形状
      4. 19.2.4 拷贝和可变性
    3. 19.3 基类和派生类
      1. 19.3.1 对象布局
      2. 19.3.2 类的派生和虚函数的定义
      3. 19.3.3 覆盖
      4. 19.3.4 访问
      5. 19.3.5 纯虚函数
    4. 19.4 面向对象程序设计的好处
    5. 简单练习
    6. 思考题
    7. 术语
    8. 习题
    9. 附言
  11. 第20章 绘制函数图和数据图
    1. 20.1 简介
    2. 20.2 绘制简单函数图
    3. 20.3 Function
      1. 20.3.1 默认参数
      2. 20.3.2 更多例子
      3. 20.3.3 lambda表达式
    4. 20.4 Axis
    5. 20.5 近似
    6. 20.6 绘制数据图
      1. 20.6.1 读取文件
      2. 20.6.2 一般布局
      3. 20.6.3 数据比例
      4. 20.6.4 构造数据图
    7. 简单练习
    8. 思考题
    9. 术语
    10. 习题
    11. 附言
  12. 第21章 图形用户界面
    1. 21.1 用户界面的选择
    2. 21.2 “Next”按钮
    3. 21.3 一个简单的窗口
      1. 21.3.1 回调函数
      2. 21.3.2 等待循环
      3. 21.3.3 lambda表达式作为回调函数
    4. 21.4 Button和其他Widget
      1. 21.4.1 Widget
      2. 21.4.2 Button
      3. 21.4.3 In_box和Out_box
      4. 21.4.4 Menu
    5. 21.5 一个实例
    6. 21.6 控制流反转
    7. 21.7 添加菜单
    8. 21.8 调试GUI代码
    9. 简单练习
    10. 思考题
    11. 术语
    12. 习题
    13. 附言
  13. 第22章 理念和历史
    1. 22.1 历史、理念和专业水平
      1. 22.1.1 程序设计语言的目标和哲学
      2. 22.1.2 编程理念
      3. 22.1.3 风格/范型
    2. 22.2 程序设计语言历史概览
      1. 22.2.1 最早的程序设计语言
      2. 22.2.2 现代程序设计语言的起源
      3. 22.2.3 Algol家族
      4. 22.2.4 Simula
      5. 22.2.5 C
      6. 22.2.6 C++
      7. 22.2.7 今天
      8. 22.2.8 参考资料
    3. 思考题
    4. 术语
    5. 习题
    6. 附言
  14. 第23章 文本处理
    1. 23.1 文本
    2. 23.2 字符串
    3. 23.3 I/O流
    4. 23.4 映射
      1. 23.4.1 实现细节
    5. 23.5 一个问题
    6. 23.6 正则表达式的思想
      1. 23.6.1 原始字符串常量
    7. 23.7 用正则表达式进行搜索
    8. 23.8 正则表达式语法
      1. 23.8.1 字符和特殊字符
      2. 23.8.2 字符集
      3. 23.8.3 重复
      4. 23.8.4 子模式
      5. 23.8.5 可选项
      6. 23.8.6 字符集和范围
      7. 23.8.7 正则表达式错误
    9. 23.9 使用正则表达式进行模式匹配
    10. 23.10 参考文献
    11. 简单练习
    12. 思考题
    13. 术语
    14. 习题
    15. 附言
  15. 第24章 数值计算
    1. 24.1 简介
    2. 24.2 大小、精度和溢出
      1. 24.2.1 数值限制
    3. 24.3 数组
    4. 24.4 C风格的多维数组
    5. 24.5 Matrix库
      1. 24.5.1 矩阵的维和矩阵访问
      2. 24.5.2 一维矩阵
      3. 24.5.3 二维矩阵
      4. 24.5.4 矩阵I/O
      5. 24.5.5 三维矩阵
    6. 24.6 实例:求解线性方程组
      1. 24.6.1 经典的高斯消去法
      2. 24.6.2 选取主元
      3. 24.6.3 测试
    7. 24.7 随机数
    8. 24.8 标准数学函数
    9. 24.9 复数
    10. 24.10 参考文献
    11. 简单练习
    12. 思考题
    13. 术语
    14. 习题
    15. 附言
  16. 第25章 嵌入式系统程序设计
    1. 25.1 嵌入式系统
    2. 25.2 基本概念
      1. 25.2.1 可预测性
      2. 25.2.2 理想
      3. 25.2.3 生活在故障中
    3. 25.3 内存管理
      1. 25.3.1 动态内存分配存在的问题
      2. 25.3.2 动态内存分配的替代方法
      3. 25.3.3 存储池实例
      4. 25.3.4 栈实例
    4. 25.4 地址、指针和数组
      1. 25.4.1 未经检查的类型转换
      2. 25.4.2 一个问题:不正常的接口
      3. 25.4.3 解决方案:接口类
      4. 25.4.4 继承和容器
    5. 25.5 位、字节和字
      1. 25.5.1 位和位运算
      2. 25.5.2 bitset
      3. 25.5.3 有符号数和无符号数
      4. 25.5.4 位运算
      5. 25.5.5 位域
      6. 25.5.6 实例:简单加密
    6. 25.6 编码规范
      1. 25.6.1 编码规范应该是怎样的
      2. 25.6.2 编码原则实例
      3. 25.6.3 实际编码规范
    7. 简单练习
    8. 思考题
    9. 术语
    10. 习题
    11. 附言
  17. 第26章 测试
    1. 26.1 我们想要什么
      1. 26.1.1 警告
    2. 26.2 程序正确性证明
    3. 26.3 测试
      1. 26.3.1 回归测试
      2. 26.3.2 单元测试
      3. 26.3.3 算法和非算法
      4. 26.3.4 系统测试
      5. 26.3.5 寻找不成立的假设
    4. 26.4 测试方案设计
    5. 26.5 调试
    6. 26.6 性能
      1. 26.6.1 计时
    7. 26.7 参考文献
    8. 简单练习
    9. 思考题
    10. 术语
    11. 习题
    12. 附言
  18. 第27章 C语言
    1. 27.1 C和C++:兄弟
      1. 27.1.1 C/C++兼容性
      2. 27.1.2 C不支持的C++特性
      3. 27.1.3 C标准库
    2. 27.2 函数
      1. 27.2.1 不支持函数名重载
      2. 27.2.2 函数参数类型检查
      3. 27.2.3 函数定义
      4. 27.2.4 C++调用C和C调用C++
      5. 27.2.5 函数指针
    3. 27.3 小的语言差异
      1. 27.3.1 struct标签名字空间
      2. 27.3.2 关键字
      3. 27.3.3 定义
      4. 27.3.4 C风格类型转换
      5. 27.3.5 无类型指针的转换
      6. 27.3.6 枚举
      7. 27.3.7 名字空间
    4. 27.4 自由存储空间
    5. 27.5 C风格字符串
      1. 27.5.1 C风格字符串和const
      2. 27.5.2 字节操作
      3. 27.5.3 实例:strcpy()
      4. 27.5.4 一个风格问题
    6. 27.6 输入/输出:stdio
      1. 27.6.1 输出
      2. 27.6.2 输入
      3. 27.6.3 文件
    7. 27.7 常量和宏
    8. 27.8 宏
      1. 27.8.1 类函数宏
      2. 27.8.2 语法宏
      3. 27.8.3 条件编译
    9. 27.9 实例:侵入式容器
    10. 简单练习
    11. 思考题
    12. 术语
    13. 习题
    14. 附言
  19. 附录C 标准库概要
  20. 附录D 安装FLTK
  21. 附录E GUI实现
  22. 术语表
  23. 参考文献

Product information

  • Title: C++程序设计:原理与实践(进阶篇)(原书第2版)
  • Author(s): 本贾尼 斯特劳斯特鲁普
  • Release date: August 2021
  • Publisher(s): Pearson
  • ISBN: 9787111562528

You might also like

book

解密金融数据

by Justin Pauley

技术是获取和解释金融数据的强大工具,能给你华尔街上所有人都想要的东西:优势。你不需要成为一名程序员就能从彭博、IHS Markit或其他系统获取金融信息。 通过本书并结合你的见解与彭博或Markit的数据,你将了解分析金融信息和生成专业报告的技能。 如果你是一名程序员,本书也包含用C#来覆盖相同主题的方法。 对比公司、债券或贷款,并使用在彭博屏幕上看不到的数据。 为单个公司建立两页的活页报告,包含重要的金融数据、与其对等组的相对价值比较和价格趋势。 建立投资组合总结报告,包含业绩、增长、风险调整后收益和组合。 探索公司债券和贷款市场的每日价格和贷款信息。 利用相关性和回归确定两种证券(或指数)之间的关系。 通过计算方差、标准差和夏普比率来衡量投资组合风险调整后的收益。 使用Markit数据来识别有意义的趋势。

book

JAVASCRIPT之美|聽頂尖程式設計師闡述他們的思維

by Anton Kovalyov

「閱讀此書有如聆聽一群JavaScript大師談論他們的想法,聽完會對這個語言有全新的體會,讓你的下一個專案更好。」 -Dave Camp, Firefox工程總監 JavaScript或許是世上最兩極化且最被誤解的程式語言,許多人嘗試要換掉它作為網路語言的角色,但JavaScript還是存活、演化且十分活躍。為何一個趕工出來的語言會如此成功,而其他語言卻失敗了? 這本書帶你一窺JavaScript專家的珍貴觀點。Jacob Thornton、Ariya Hidayat、與Sara Chipps等各領域的高手展現對此語言的熱愛,無論是將可怕的特徵轉換成實用的工具,或是將JavaScript應用於展現自我。

book

算法技术手册(原书第2 版)

by George T.Heineman, Gary Pollice, Stanley Selkow

打造鲁棒性优秀的软件需要用到高效的算法,然而程序员们却对此知之甚少。新版的《算法技术手册》介绍了用于解决各种类型问题的已有算法,并帮助读者挑选和实现最适合自身需要的算法。不仅如此,书中还提供了恰到好处的数学知识来帮助读者理解和分析算法的性能。 本书侧重应用多于理论且规范严谨。书中提供了用多种程序设计语言实现的文档化的实际代码解决方案。此外,新版还增加了用Python实现的10多种新算法、Voronoi图算法实现以及包括R树(R-Trees)和四叉树(Quadtrees)在内的空间树结构等内容。 通过阅读本书,你将可以: 解决新的编码问题,提升现有解决方案的性能。 快速定位与问题相关的算法,并挑选最佳算法。 获取带有实现技巧提示的采用C、C++、Java和Python实现的算法解决方案。 学习算法的预期性能和最佳性能所需要的条件。 使用高级数据结构提升算法效率。

book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉

本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队主管Alan Donovan联袂撰写,是学习Go语言程序设计的权威指南。本书共13章,主要内容包括:Go的基础知识、基本结构、基本数据类型、复合数据类型、函数、方法、接口、goroutine、通道、共享变量的并发性、包、go工具、测试、反射等。