第1章 字符串处理 1
1.1 字符串基本操作 1
1.1.1 字符串复制 1
1.1.2 字符串连接 3
1.1.3 反转字符串 6
1.1.4 大小写转换 8
1.1.5 字符串与数的转换 10
1.1.6 字符串查找 14
1.1.7 删除字符 16
1.1.8 字符串字典比较 17
1.2 字符串处理常见问题 20
1.2.1 居民身份证号的表示 20
1.2.2 std::string与const char*转换 21
1.2.3 字符串与buffer缓冲 21
1.2.4 设置浮点数精度 22
1.2.5 得到一行输入的字符串 23
1.2.6 统计一行文本中单词个数 24
1.2.7 std::stream的高速缓冲方法 25
1.3 综合编程实例:公民数据模拟 27
第2章 排序和查找 34
2.1 桶排序(bucket sort) 34
2.2 qsort排序 34
2.2.1 整型数组的qsort 35
2.2.2 浮点型数组的qsort 36
2.2.3 字符型数组的qsort 37
2.2.4 字符串数组的qsort 38
2.2.5 结构类型数组的qsort 40
2.3 std::sort排序 43
2.3.1 std:: sort基本用法 43
2.3.2 std::greater基本用法 45
2.3.3 自定义类型排序 46
2.4 二分查找算法 48
2.5 std::find查找 51
2.6 综合编程实例 52
第3章 栈、链表与队列 64
3.1 栈 64
3.1.1 std::stack基本用法 64
3.1.2 综合编程实例 65
3.2 链表 74
3.2.1 std::list基本用法 75
3.2.2 综合编程实例 77
3.3 队列 80
3.3.1 std::queue基本用法 80
3.3.2 std::deque基本用法 81
3.3.3 综合编程实例:卡片游戏 82
第4章 树与图 84
4.1 二叉树 84
4.1.1 完全二叉树 84
4.1.2 二叉树遍历 85
4.1.3 手写二叉树的遍历 86
4.1.4 二叉树高度计算 87
4.1.5 二叉树删除 88
4.1.6 综合编程实例 88
4.2 图 102
4.2.1 图的基本操作 102
4.2.2 图的表示方法 102
4.2.3 综合编程实例 103
第5章 递归与分治 112
5.1 汉诺塔 112
5.2 子串组合 113
5.3 数组组合 115
5.4 格子排列 118
5.5 八皇后 122
5.6 循环赛日程安排 124
5.7 棋盘覆盖 128
第6章 集合与映射 132
6.1 集合 132
6.1.1 集合std::set 132
6.1.2 集合求交set intersection 133
6.1.3 集合求并set union 135
6.1.4 集合求差set difference 136
6.1.5 综合编程实例:集合相似度 137
6.2 映射 139
6.2.1 std::map基本用法 139
6.2.2 std::multimap基本用法 140
6.3 哈希映射 141
6.3.1 常用的哈希函数 142
6.3.2 哈希冲突的处理方法 142
6.3.3 综合编程实例 142
第7章 Win32 GUI编程基础 148
7.1 Win32 GUI 148
7.1.1 CodeBlocks第一个Win32教程 148
7.1.2 Visual Studio 2015第一个Win32 GUI程序 150
7.1.3 代码分析 151
7.2 Win32消息基础 155
7.2.1 窗口关闭消息WM CLOSE 155
7.2.2 窗口大小调整消息WM SIZE 156
7.2.3 窗口创建消息WM CREATE 157
7.2.4 菜单或其他按钮消息WM COMMAND 158
7.2.5 鼠标消息 159
7.2.6 绘制消息WM PAINT 160
7.2.7 键盘消息WM KEYDOWN和WM KEYUP 161
7.3 综合编程实例:简单多边形的创建、绘制、平移与旋转 162
7.4 Win32图形设备接口GDI 176
7.4.1 线段和曲线绘制 177
7.4.2 笔、画刷、填充绘制 179
7.4.3 字体和文本 184
7.4.4 光栅操作 186
7.4.5 双缓冲机制 188
第8章 综合编程实例 190
8.1 扑克洗牌 190
8.2 二叉树重建可视化 194
8.3 L-System分形树建模 204
8.4 迷宫问题 219
参考文献 226