内容简介 · · · · · ·
本书全面、系统地讲解了C和C++中的常用函数及算法,其内容分为3篇,共29章,包括近300个常用函数和九大类算法,还以实例形式讲解了Visual Studio调试技术。其中,在C语言函数篇,对每一个函数的讲解都包含了函数原型、功能、参数、返回值、范例、解析等内容,部分函数会通过综合实例来辅助理解。在算法篇,每个算法采用相应实例进行讲解,包含问题、分析、实现、说明等内容。在C++输入/输出流与容器篇,针对每个类库选取了最常用的函数,按构造类函数、存取类函数、操作类函数等类别从函数原型、函数功能、函数参数、函数返回值、函数范例、函数解析等方面进行了介绍。本书适合学习C/C++函数和算法的初、中级开发人员,爱好者和大、中专院校学生使用。对于经常使用C/C++进行开发的程序员,本书更是一本不可多得的案头常备工具书。
作者简介 · · · · · ·
1.陈锐,硕士生导师,中国人工智能学会情感智能专委会委员、中国图象图形学学会人机交互专委会委员。目前从事数据结构与算法方面的教学工作,以及人工智能、推荐系统方面的科研工作。出版多部作品,其中两部获批省部级规划教材立项建设。
2.孙玉胜,硕士生导师,电子书信息工程国家专业建设点负责人,“Python 程序设计”省级课程负责人。目前从事电子信息、软件工程专业教学和科研工作。
3.梁辉,教授,博士生导师,河南省计算机动画实现技术国际联合实验室主任,数字媒体技术专业带头人,“计算机动画与虚拟现实”科技创新团队带头人。目前从事计算机动画、数字媒体技术、虚拟现实的科研工作。
目录 · · · · · ·
第 1篇 C语言函数篇
第 1章 ctype.h库函数 2
ctype.h库函数主要包括一些字符处理函数。例如,其中的isalnum函数用来判断是否是英文字母或数字字符,tolower函数是将大写字母转换为小写字母。
1.1 字符测试函数 2
1.1.1 isalnum函数—判断是否是英文字母或数字字符 2
1.1.2 isalpha函数—判断是否为英文字母 3
· · · · · · (更多)
第 1章 ctype.h库函数 2
ctype.h库函数主要包括一些字符处理函数。例如,其中的isalnum函数用来判断是否是英文字母或数字字符,tolower函数是将大写字母转换为小写字母。
1.1 字符测试函数 2
1.1.1 isalnum函数—判断是否是英文字母或数字字符 2
1.1.2 isalpha函数—判断是否为英文字母 3
· · · · · · (更多)
第 1篇 C语言函数篇
第 1章 ctype.h库函数 2
ctype.h库函数主要包括一些字符处理函数。例如,其中的isalnum函数用来判断是否是英文字母或数字字符,tolower函数是将大写字母转换为小写字母。
1.1 字符测试函数 2
1.1.1 isalnum函数—判断是否是英文字母或数字字符 2
1.1.2 isalpha函数—判断是否为英文字母 3
1.1.3 isascii函数—判断ASCII码是否位于0~127 4
1.1.4 iscntrl函数—判断是否是控制字符 5
1.1.5 isdigit函数—判断是否是数字字符 6
1.1.6 isgraph函数—判断是否是可打印字符(不包括空格) 7
1.1.7 islower函数—判断是否是小写英文字母 8
1.1.8 isprint函数—判断是否是可打印字符(包括空格) 10
1.1.9 ispunct函数—判断是否是标点符号 11
1.1.10 isspace函数—判断是否是 空白符 12
1.1.11 isxdigit函数—判断是否是 十六进制字符 13
1.2 字符转换函数 15
1.2.1 tolower函数—将大写英文字母转换为小写英文字母 15
1.2.2 toupper函数—将小写英文字母转换为大写英文字母 16
1.2.3 toascii函数—将字符转换为ASCII码 17
第 2章 stdio.h库函数 19
stdio.h库函数主要包括常用的输入/输出函数。例如,其中的getch函数用来接受从键盘输入的字符,printf函数用来格式化输出数据,fprintf函数用来格式化输出数据到指定的文件中。
2.1 字符输入/输出函数 19
2.1.1 getch函数和getche函数—接受从键盘输入的字符 19
2.1.2 getchar函数—接受一个字符并显示在屏幕上 20
2.1.3 gets函数—读取一个字符串 21
2.1.4 putchar函数—在屏幕上输出一个字符 23
2.1.5 puts函数—在屏幕上输出一个字符串 24
2.2 格式化输入/输出函数 25
2.2.1 printf函数—格式化输出数据 25
2.2.2 scanf函数—格式化输入数据 28
2.2.3 sprintf函数—输出格式化数据到指定的数组中 30
2.2.4 sscanf函数—从字符串读取格式化数据 31
2.2.5 vprintf函数—在屏幕上输出格式化变长参数列表 33
2.2.6 vscanf函数—读取从键盘输入的格式化数据 34
2.3 文件输入/输出函数 35
2.3.1 fgetc函数和getc函数—从文件中读取一个字符 35
2.3.2 fgets函数—从文件中读取多个字符 36
2.3.3 fprintf函数—格式化输出数据到指定的文件中 38
2.3.4 fscanf函数—从文件中读取格式化数据 39
2.3.5 fputc函数和putc函数—输出一个字符到指定的文件中 40
2.3.6 fputs函数—输出一个字符串到指定的文件中 42
2.3.7 fread函数—从文件中读取一个数据块 43
2.3.8 fwrite函数—向文件中写入数据块 44
2.3.9 vfprintf函数—输出格式化数据到指定的文件 46
2.3.10 vfscanf函数—从文件中读取 格式化数据 47
2.4 文件定位函数 48
2.4.1 fseek函数—移动文件位置指针到指定位置 49
2.4.2 ftell函数—得到文件位置指针的当前值 50
2.4.3 rewind函数—将文件位置指针移动到文件的开头 51
2.5 文件存取操作函数 53
2.5.1 fclose函数—关闭文件 53
2.5.2 fflush函数—将缓冲区的内容写入文件 54
2.5.3 fopen函数—打开文件 55
2.5.4 remove函数—删除文件 57
2.5.5 rename函数—重命名文件 58
2.6 文件错误控制函数 60
2.6.1 clearerr函数—清除文件中的错误标志 60
2.6.2 feof函数—是否到了文件末尾 61
2.6.3 ferror函数—检查文件操作是否出现了错误 62
2.7 文件输入/输出函数综合应用范例 64
第3章 string.h库函数 70
string.h库函数主要包括常用的字符串操作函数。例如,其中的strcmp函数用来比较两个字符串的大小,strcpy函数用来将一个字符串拷贝到另一个字符串中,strcat函数用来将两个字符串连接在一起。
3.1 字符串比较函数 70
3.1.1 memcmp函数和memicmp函数—比较两个字符串 70
3.1.2 strcmp函数和stricmp函数—比较两个字符串 72
3.1.3 strncmp函数和strnicmp函数—比较两个字符串 74
3.2 字符串拷贝函数 75
3.2.1 memcpy函数—拷贝n个字节到另一个数组 75
3.2.2 memmove函数—拷贝n个字节到数组中(可重叠) 76
3.2.3 strcpy函数—字符串拷贝 77
3.2.4 strncpy函数—拷贝n个字符到目的字符数组 78
3.3 字符串连接函数 80
3.3.1 strcat函数—连接两个字符串 80
3.3.2 strncat函数—将字符串1的前n个字符连接到字符串2 81
3.4 字符串查找函数 82
3.4.1 memchr函数—在内存块中查找字符 83
3.4.2 strchr函数—在字符串中查找字符 84
3.4.3 strstr函数—查找字符串 85
3.4.4 strtok函数—分解字符串 87
3.5 字符串转换函数 88
3.5.1 strlwr函数—将大写字母转换为小写字母 88
3.5.2 strrev函数—将字符串逆置 90
3.5.3 strupr函数—将小写字母转换为大写字母 91
3.6 其他函数 92
3.6.1 memset函数—用指定的字符填充字符串 92
3.6.2 strlen函数—求字符串的长度 93
3.7 字符串函数综合应用范例 94
第4章 stdlib.h库函数 99
stdlib.h库函数主要包括字符串转换函数、动态内存管理函数、过程控制函数等。例如,atof 函数是将字符串转换为双精度浮点数,malloc函数是分配内存空间,abort函数用来终止当前的进程。
4.1 字符串转换函数 99
4.1.1 atof函数—将字符串转换为双精度浮点数 99
4.1.2 atoi函数—将字符串转换为整数 101
4.1.3 atol函数—将字符串转换为长整型数 102
4.1.4 strtod函数—将字符串转换为双精度浮点数 103
4.1.5 strtol函数—将字符串转换为长整型数 104
4.2 动态内存管理函数 106
4.2.1 malloc函数—分配内存空间 106
4.2.2 calloc函数—分配内存空间并初始化 107
4.2.3 free函数—释放内存空间 109
4.2.4 realloc函数—重新分配内存空间 111
4.2.5 动态内存管理函数综合应用范例 112
4.3 随机数生成函数 116
4.3.1 rand函数—产生伪随机数 116
4.3.2 srand函数—初始化随机数发生器 117
4.4 查找函数和排序函数 118
4.4.1 bsearch函数—折半查找 118
4.4.2 qsort函数—快速排序 119
4.4.3 排序函数和查找函数综合应用范例 121
4.5 过程控制函数 123
4.5.1 abort函数—终止当前进程 123
4.5.2 exit函数—退出当前程序 126
4.5.3 system函数—执行系统命令 127
第5章 math.h库函数 129
math.h 库函数主要包括三角函数、指数和对数函数、幂指数和开方函数等。例如,cos 函数用来求角度的余弦值,log 函数用来求自然对数,pow 10函数用来求10exp的值。
5.1 三角函数 129
5.1.1 cos函数—求角度的余弦值 129
5.1.2 sin函数—求角度的正弦值 130
5.1.3 tan函数—求角度的正切值 131
5.1.4 acos函数—求角度的反余弦值 132
5.1.5 asin函数—求角度的反正弦值 133
5.1.6 atan函数—求角度的反正切值 134
5.2 指数和对数函数 136
5.2.1 exp函数—求以自然数e为底的指数值 136
5.2.2 log函数—求自然对数 137
5.2.3 log10函数—求对数 138
5.3 幂指数和开方函数 139
5.3.1 pow函数—求baseexp的值 139
5.3.2 pow10函数—求10exp的值 140
5.3.3 sqrt函数—求平方根 141
5.4 绝对值函数 142
5.4.1 abs函数—求整数的绝对值 143
5.4.2 fabs函数—求浮点数的绝对值 144
5.4.3 labs函数—求长整型数据的绝对值 145
5.5 其他函数 146
5.5.1 floor函数—求不大于x的最大整数 146
5.5.2 fmod函数—返回x/y的余数 147
5.5.3 frexp函数—将浮点数分解为尾数和指数 148
5.5.4 hypot函数—根据直角边求斜边 149
5.5.5 modf函数—将浮点数分解为整数部分和小数部分 151
5.5.6 poly函数—计算xn的值 152
5.6 数学函数综合应用范例 153
5.6.1 计算方程的根 153
5.6.2 求整数序列的第i个元素 155
5.6.3 求2s+2t的第 10项 156
第6章 stdarg.h库函数 159
stdarg.h 库函数主要包括3个用来处理变长参数的宏。例如,va_arg宏用来获取下一个参数,va_start宏用来初始化变长参数列表。
6.1 va_arg宏 159
6.2 va_start宏 161
6.3 va_end宏 162
6.4 可变参数函数综合应用范例 164
第7章 time.h库函数 166
time.h 库函数主要包括一些时间处理函数。例如,其中的 time 函数用来得到当前的时间,ctime 函数用来将时间转换为字符串形式。
7.1 时间操作函数 166
7.1.1 clock函数—返回CPU时钟计时单元 166
7.1.2 difftime函数—计算两个时钟之间的间隔 167
7.1.3 time函数—得到当前的时间 169
7.2 时间格式转换函数 170
7.2.1 asctime函数—将时间格式转换为字符串形式 170
7.2.2 ctime函数—将时间转换为字符串形式 171
7.2.3 gmtime函数—返回(格林尼治)时间结构的指针 172
7.2.4 localtime函数—返回指向时间结构的指针 174
7.2.5 mktime函数—将struct tm格式的时间转换为秒 175
7.2.6 strftime函数—将时间格式化为字符串 176
第 2篇 算法篇
第8章 排序算法 180
排序算法是程序设计中较为常用的算法。排序算法主要包括插入排序、交换排序、选择排序、归并排序和基数排序。
8.1 插入排序 180
8.1.1 直接插入排序 180
8.1.2 折半插入排序 182
8.1.3 希尔排序 185
8.2 交换排序 187
8.2.1 冒泡排序 188
8.2.2 快速排序 191
8.3 选择排序 195
8.3.1 简单选择排序 195
8.3.2 堆排序 199
8.4 归并排序 205
8.5 基数排序 207
第9章 查找算法 214
查找算法是程序设计中常用的算法。查找算法主要包括基于线性表的查找、基于树的查找和哈希表的查找。
9.1 基于线性表的查找 214
9.1.1 顺序查找 214
9.1.2 折半查找 216
9.1.3 分块查找 219
9.2 基于树的查找 222
9.2.1 基于二叉排序树的查找操作 222
9.2.2 基于二叉排序树的插入操作 224
9.3 哈希表的查找 227
9.3.1 构造哈希表 227
9.3.2 处理冲突 229
第 10章 递推算法 234
递推算法是通过不断迭代,用旧的变量值递推得到新值。递推算法常用来解决重复计算的问题,如斐波那契数列、存取问题等。
10.1 顺推法 234
10.1.1 斐波那契数列 234
10.1.2 将十进制数转换为二进制数 236
10.1.3 求最大公约数和最小公倍数 238
10.1.4 质因数的分解 240
10.1.5 角谷猜想 241
10.1.6 母牛生小牛问题 242
10.1.7 杨辉三角 243
10.2 逆推法 245
10.2.1 猴子摘桃问题 245
10.2.2 存取问题 246
第 11章 枚举算法 248
枚举算法也称穷举算法,它是编程中常用的一种算法。在解决某些问题时,可能无法按照一定规律从众多的候选解中找出正确的答案。此时,可以从众多的候选解中逐一取出候选答案,并验证候选答案是否为正确的解。
11.1 判断n是否能被3、5、7整除 248
11.2 百钱买百鸡 251
11.3 五猴分桃 252
11.4 求最大连续子序列和 254
11.5 填数游戏 256
11.6 谁在说谎 257
第 12章 递归算法 260
递归是自己调用自己,它将一个复杂的问题进行整体考虑,只要知道最基本问题的答案,就可以得到整个问题的答案。常见的递归问题有阶乘、斐波那契数列和最大公约数等。
12.1 简单递归 260
12.1.1 求n的阶乘 260
12.1.2 斐波那契数列 263
12.1.3 求n个数中的最大者 265
12.1.4 进制转换 266
12.1.5 求最大公约数 267
12.2 复杂递归 268
12.2.1 逆置字符串 268
12.2.2 和式分解 270
12.2.3 和式分解(分解出的和数非递 增排列) 272
12.2.4 求无序序列中的第k大 元素 273
12.2.5 从1~n个自然数中任选r个 数的所有组合数 275
12.2.6 大牛生小牛问题 277
第 13章 贪心算法 279
贪心算法是一种不追求最优解,只希望找到较为满意解的方法。贪心算法省去了为找最优解要穷尽所有可能而必须耗费的大量时间,因此,它一般可以快速得到比较满意的解。贪心算法常以当前情况为基础做最优选择,而不考虑各种可能的整体情况,所以贪心算法不需要回溯。
13.1 找零钱问题 279
13.2 哈夫曼编码 281
13.3 加油站问题 288
第 14章 回溯算法 290
回溯算法也称为试探法,是一种选优搜索法。该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按照某种顺序逐一枚举和检验。当发现当前的候选解不可能是解时,就选择下一个候选解;倘若当前候选解只是不满足问题的规模要求,但满足所有其他要求时,则继续扩大当前候选解的规模,并继续向前试探。如果当前的候选解满足包括问题规模在内的所有要求,则该候选解就是问题的一个解。在寻找解的过程中,放弃当前候选解,退回上一步重新选择候选解的过程就称为回溯。
14.1 和式分解(非递归实现) 290
14.2 填字游戏 293
14.3 装箱问题 297
第 15章 分治算法 300
分治算法是将一个规模为N的问题分解为K个规模较小的子问题进行求解,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。最大子序列和、求x的n次幂、众数问题等就是利用分治算法来实现的。
15.1 最大子序列和问题 300
15.2 求x的n次幂 302
15.3 众数问题 304
15.4 求n个数中的最大者和最小者 306
15.5 整数划分问题 308
15.6 大整数的乘法问题 310
第 16章 矩阵算法 315
矩阵算法主要通过分析数组中元素值的变化规律,巧妙利用数组下标与元素值之间的关系设计算法。矩阵算法往往需要交换或者存取矩阵中的某个元素,这就需要灵活掌握二维数组两个下标的变换。
16.1 打印拉丁方阵 315
16.2 打印蛇形方阵 317
16.3 打印螺旋矩阵(非递归和递归实现) 318
16.4 打印逆螺旋矩阵 321
16.5 将矩阵旋转90度 322
16.6 将上三方阵以行序为主序转换为以列序为主序 324
第 17章 实用算法 327
在学习和工作中,经常会遇到一些与实际生活紧密相关的问题,这些问题也可通过算法来得到答案,从而大大提高我们的学习和工作效率。比较常见的实用算法有计算一年中的第几天、大小写金额转换、微信抢红包问题、求算术表达式的值、一元多项式的乘法、大整数乘法。
17.1 一年中的第几天 327
17.2 大小写金额转换 329
17.3 将15位身份证号转换为18位 333
17.4 微信抢红包问题 335
17.5 求算术表达式的值 336
17.6 一元多项式的乘法 345
17.7 大整数乘法 351
17.8 迷宫求解 353
第 18章 程序调试技术 359
程序调试也是程序员必备的一项技能。对于初学者来说,通过不断调试程序,既验证了程序的正确性,又深入地理解了程序的算法思想,提高了调试程序的能力,为今后深入学习计算机的其他内容打下坚实的基础。
18.1 为什么要调试程序 359
18.2 程序调试 360
18.2.1 如何使用Visual Studio 2019开发 环境调试程序 360
18.2.2 冒泡排序程序调试 366
18.2.3 合并链表程序调试 371
以下章节见电子资源
第3篇 C++输入/输出流与容器篇
第 19章 ios_base类 379
ios_base类主要是C++输入/输出流的基类,它主要包含流的格式化函数。例如,flags函数用来获取或设置流格式,precision函数用来得到/设置浮点数的精度。
19.1 flags函数—得到/设置流的格式标志 380
19.2 setf函数和unsetf函数—设置和清除流的格式标志 381
19.3 precision函数—得到/设置浮点数的精度 383
19.4 width函数—得到/设置域宽 384
第 20章 iostream类 386
iostream 类派生自istream类和 ostream类。iostream 类中的函数非常常用。例如,isotream类的对象cout用来控制输出、cin用来控制输入。
20.1 get函数—无格式的输入操作 388
20.2 getline函数—接受输入的字符串 390
20.3 ignore函数—忽略指定的字符 391
20.4 peek函数—从流中接受输入的字符 392
20.5 read函数—读取一个字符块 393
20.6 putback函数—将读取的字符返回给输入流 394
20.7 put函数—输出字符 396
20.8 fill函数—得到/设置填充字符 397
第 21章 文件流类 399
ifstream类、ofstream类和fstream类都是对文件进行读/写操作的类,我们将这些类统称为文件流类。在C++中,要对文件进行读/写操作,就需要先将文件流类与文件关联起来(一般采用open的方式或构造函数的方式),然后再利用文件流对文件进行操作。
21.1 ifstream构造函数—创建输入流对象 400
21.2 rdbuf函数—返回指向filebuf的指针 401
21.3 is_open函数—检测文件是否被打开 403
21.4 open函数和close函数—打开和关闭文件 404
21.5 read函数和write函数—从流中读取数据和向流中写入数据 406
21.6 seekg函数和tellg函数—设置和得到流的位置指针位置 407
21.7 seekp函数和tellp函数—设置和得到文件的位置指针位置 409
21.8 flush函数—刷新输出流缓冲区 411
第 22章 string类 412
string类主要用于消除对char*的使用,以保持与现有代码的兼容性,它还会自动进行内存管理,便于对字符进行操作,其性能比使用char*更佳。
22.1 字符串运算符函数 412
22.1.1 字符串构造函数—构造字符 串对象 412
22.1.2 =运算符函数—将字符串内容 拷贝到新字符串对象 414
22.1.3 +和+=运算符函数—连接 字符串 415
22.1.4 ==、!=、<、>、<=、>=运算符 函数—比较字符串 417
22.1.5 []运算符函数—返回string中 的某个字符 418
22.1.6 at函数—返回string中的某个 字符(范围检测) 419
22.2 字符串迭代器函数 420
22.2.1 begin函数和end函数—返回 第 一个字符和最后一个字符的 迭代器 420
22.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 422
22.3 字符串长度函数 423
22.3.1 length函数和size函数—返回 字符个数 423
22.3.2 max_size函数—返回string能 容纳的最大字符个数 424
22.3.3 capacity函数—返回分配的 存储空间大小 425
22.3.4 resize函数—设置string的 长度 427
22.3.5 reserve函数—为string对象 预留空间 428
22.3.6 empty函数—判断string是否 为空 429
22.4 字符串操作函数 430
22.4.1 insert函数—判断string是否 为空 430
22.4.2 erase函数—清除string中的 字符 432
22.4.3 replace函数—置换string中的 字符 433
22.4.4 swap函数—交换两个字符串 的内容 436
22.4.5 c_str函数—返回与string 等效的字符串 437
22.4.6 copy函数—取出string对象中 的指定字符 438
22.4.7 find函数—在string对象中 查找字符串 439
22.4.8 find_first_of函数和find_last_of 函数—在string中查找字符串 (部分匹配) 441
22.4.9 substr函数—生成string的 子串 442
22.4.10 stoi函数—将字符串中的 数字转换为整数 444
第 23章 vector类 446
vector类是C++中常用的容器类,包括了一些常用的函数实现,用户无须重新编写函数即可使用。例如,size 函数用来表示向量的大小,empty函数用来表示向量是否为空,push_back函数用来向向量中追加元素。
23.1 构造类函数 446
23.1.1 vector的构造函数和析构 函数—创建vector对象和 释放vector对象 446
23.1.2 operator=函数—拷贝vector中 的内容 448
23.2 迭代器函数 449
23.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的后 一个位置 449
23.2.2 rbegin函数和rend函数—返回 与最后一个元素和第 一个元素 相关的迭代器 450
23.3 容量类函数 452
23.3.1 size函数、max_size函数和capacity 函数—返回元素的实际个数、 能容纳的最大元素个数和分配的 存储空间大小 452
23.3.2 empty函数—判断vector是否 为空 453
23.3.3 resize函数—调整vector容器 的大小 455
23.3.4 reserve函数—重新为vector 容器分配内存空间 456
23.4 存取类函数 457
23.4.1 operator[]函数—存取vector中 的元素 457
23.4.2 at函数—存取vector中的元素 (进行越界检查) 459
23.4.3 front函数和back函数—返回 vector中的第 一个元素和最后 一个元素 460
23.5 操作类函数 461
23.5.1 assign函数—为vector中的 元素赋值 462
23.5.2 push_back函数—在vector的 末尾追加新元素 463
23.5.3 pop_back函数—删除vector中 的最后一个元素 464
23.5.4 insert函数—在vector中插入 元素 466
23.5.5 erase函数—删除vector中指定 的元素 467
23.5.6 clear函数—清除vector中的 元素 469
23.5.7 swap函数—交换两个vector 中的内容 470
第 24章 deque类 472
deque类是C++的双端队列。它主要包括求队列的大小函数、元素的存取函数、向队列中插入元素和删除元素的函数等。
24.1 构造类函数 472
24.1.1 deque的构造函数和析构 函数—创建deque对象和 释放deque对象 472
24.1.2 operator=函数—拷贝deque中 的内容 474
24.2 迭代器函数 475
24.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的 后一个位置 476
24.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 477
24.3 容量类函数 478
24.3.1 size函数和max_size函数— 返回元素的实际个数和能容纳的 最大元素个数 478
24.3.2 empty函数—判断deque是否 为空 480
24.3.3 resize函数—调整deque容器 的大小 481
24.4 存取类函数 483
24.4.1 operator[]函数—存取deque中 的元素 483
24.4.2 at函数—存取deque中的元素 (进行越界检查) 484
24.4.3 front函数和back函数—返回 deque中的第 一个元素和最后一 个元素 486
24.5 操作类函数 487
24.5.1 assign函数—为deque中的 元素赋值 487
24.5.2 push_back函数—在deque的 末尾追加新元素 489
24.5.3 push_front函数—在deque的 开始位置插入新元素 490
24.5.4 pop_back函数—移除deque中 的最后一个元素 491
24.5.5 pop_front函数—移除deque中 的第 一个元素 492
24.5.6 insert函数—在deque的指定 位置插入元素 494
24.5.7 erase函数—删除deque中指定 的元素 495
24.5.8 clear函数—清除deque中的 所有元素 497
24.5.9 swap函数—交换两个deque中 的内容 498
第 25章 list类 501
list类是C++的链表容器。它主要包括求链表的大小函数、元素的存取函数、链表的操作函数。例如,push_front函数在链表的开始插入元素,push_back函数在链表的末尾插入元素,unique函数删除链表中重复的元素。
25.1 构造类函数 501
25.1.1 list的构造函数和析构函数— 创建list对象和释放list 对象 501
25.1.2 operator=函数—拷贝list中的 内容 503
25.2 迭代器函数 505
25.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的 后一个位置 505
25.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 506
25.3 容量类函数 508
25.3.1 size函数和max_size函数— 返回元素的实际个数和能容纳的 最大元素个数 508
25.3.2 empty函数—判断list是否 为空 510
25.3.3 resize函数—调整list的 大小 511
25.4 存取类函数 513
25.4.1 front函数—返回list中的 第 一个元素 513
25.4.2 back函数—返回list中的 最后一个元素 514
25.5 操作类函数 515
25.5.1 assign函数—为list中的元素 赋值 515
25.5.2 push_back函数—在list的末尾 追加新元素 517
25.5.3 push_front函数—在list的 开始位置插入新元素 518
25.5.4 pop_back函数—移除list 中的最后一个元素 519
25.5.5 pop_front函数—移除list中的 第 一个元素 520
25.5.6 insert函数—在list的指定位置 插入元素 522
25.5.7 erase函数—删除list中指定的 元素 523
25.5.8 clear函数—清除list中的所有 元素 525
25.5.9 swap函数—交换两个list中的 内容 526
25.5.10 splice函数—将一个list 中的元素移动到另一个 list 528
25.5.11 remove函数—从list中移除 指定的元素 529
25.5.12 remove_if函数—删除list中 不等于迭代器指向的函数 531
25.5.13 unique函数—删除list中重复 的元素 532
25.5.14 merge函数—将两个list链表 合并 534
25.5.15 sort函数—对list中的元素 排序 535
25.5.16 reverse函数—将list中的 元素逆置 537
第 26章 stack类 539
stack类是C++的栈容器。它主要包括求栈的大小函数和存取函数。例如,top函数返回栈顶元素,push函数在栈顶位置插入新元素,pop函数删除栈顶元素。
26.1 构造类函数 539
26.2 容量类函数 541
26.2.1 empty函数—判断stack 是否为空 541
26.2.2 size函数—返回stack中的 元素个数 542
26.3 存取类函数 543
26.4 操作类函数 544
26.4.1 push函数—在stack的栈顶 位置插入新元素 544
26.4.2 pop函数—移除stack的栈 顶元素 546
第 27章 queue类 548
queue类是C++的队列容器。它主要包括队列的存取函数和一些判断队列的状态函数。例如,front函数用来存取队头元素,back函数用来存取队尾元素。
27.1 构造类函数 548
27.2 容量类函数 550
27.2.1 empty函数—判断queue 是否为空 550
27.2.2 size函数—返回queue的 大小 551
27.3 存取类函数 552
27.3.1 front函数—返回queue的 队头元素 552
27.3.2 back函数—返回queue的 队尾元素 553
27.4 操作类函数 554
27.4.1 push函数—在queue队尾 插入新元素 554
27.4.2 pop函数—移除queue的 队头元素 556
第 28章 set类 558
set类是C++的集合容器。它主要包括求集合的大小函数和其他操作函数。例如,find函数返回要查找元素的迭代器,lower_bound函数返回大于等于某个值的第 一个元素的迭代器。
28.1 构造类函数 558
28.2 迭代器类函数 560
28.2.1 begin函数和end函数—返回 set的第 一个元素和最后一个元 素的迭代器 560
28.2.2 rbegin函数和rend函数—返回 set中的最后一个元素和第 一个 元素的反向迭代器 562
28.3 容量类函数 563
28.3.1 empty函数—判断set是否 为空 563
28.3.2 size函数—返回set的 大小 564
28.3.3 max_size函数—返回set能 容纳的最大元素个数 565
28.4 操作类函数 567
28.4.1 insert函数—在set中插入新 元素 567
28.4.2 swap函数—交换两个set中的 内容 568
28.4.3 erase函数—清除set中的 元素 570
28.4.4 clear函数—清空set中的 元素 572
28.4.5 find函数—查找set中的 元素 573
28.4.6 count函数—统计set中某一个 元素的个数 574
28.4.7 lower_bound函数和upper_bound 函数—返回set中元素下界和 上界的迭代器 576
28.4.8 equal_range函数—返回set中 元素x的下限和上限 577
第 29章 map类 579
map 类是 C++的映射容器。它主要包括求map容器大小的函数、元素的存取函数和查找操作函数。例如,insert函数是插入一个元素到map中,erase函数是清除map中的元素。
29.1 构造类函数 580
29.1.1 map的构造函数和析构函数— 创建map对象和释放map 对象 580
29.1.2 map的赋值构造函数—通过一 个map对象为另一个map对象 赋值 581
29.2 迭代器类函数 583
29.2.1 begin函数和end函数—返回 第 一个元素的位置和最后一个 元素的后一个位置 583
29.2.2 rbegin函数和rend函数—返回 指向map中最后一个元素的反 向迭代器和第 一个元素之 前的反向迭代器 584
29.3 容量类函数 585
29.3.1 empty函数—判断map是否 为空 585
29.3.2 size函数—返回map容器中的 元素个数 587
29.3.3 max_size函数—返回map容器 能容纳的最大元素个数 588
29.4 存取类函数 589
29.5 操作类函数 590
29.5.1 insert函数—在map中插入 新元素 590
29.5.2 erase函数—移除map中的 元素 592
29.5.3 swap函数—交换两个map中 的内容 594
29.5.4 clear函数—清除map中的 所有元素 595
29.5.5 count函数—统计map中某个 元素关键字的个数 596
29.5.6 find函数—查找map中的 元素 598
· · · · · · (收起)
第 1章 ctype.h库函数 2
ctype.h库函数主要包括一些字符处理函数。例如,其中的isalnum函数用来判断是否是英文字母或数字字符,tolower函数是将大写字母转换为小写字母。
1.1 字符测试函数 2
1.1.1 isalnum函数—判断是否是英文字母或数字字符 2
1.1.2 isalpha函数—判断是否为英文字母 3
1.1.3 isascii函数—判断ASCII码是否位于0~127 4
1.1.4 iscntrl函数—判断是否是控制字符 5
1.1.5 isdigit函数—判断是否是数字字符 6
1.1.6 isgraph函数—判断是否是可打印字符(不包括空格) 7
1.1.7 islower函数—判断是否是小写英文字母 8
1.1.8 isprint函数—判断是否是可打印字符(包括空格) 10
1.1.9 ispunct函数—判断是否是标点符号 11
1.1.10 isspace函数—判断是否是 空白符 12
1.1.11 isxdigit函数—判断是否是 十六进制字符 13
1.2 字符转换函数 15
1.2.1 tolower函数—将大写英文字母转换为小写英文字母 15
1.2.2 toupper函数—将小写英文字母转换为大写英文字母 16
1.2.3 toascii函数—将字符转换为ASCII码 17
第 2章 stdio.h库函数 19
stdio.h库函数主要包括常用的输入/输出函数。例如,其中的getch函数用来接受从键盘输入的字符,printf函数用来格式化输出数据,fprintf函数用来格式化输出数据到指定的文件中。
2.1 字符输入/输出函数 19
2.1.1 getch函数和getche函数—接受从键盘输入的字符 19
2.1.2 getchar函数—接受一个字符并显示在屏幕上 20
2.1.3 gets函数—读取一个字符串 21
2.1.4 putchar函数—在屏幕上输出一个字符 23
2.1.5 puts函数—在屏幕上输出一个字符串 24
2.2 格式化输入/输出函数 25
2.2.1 printf函数—格式化输出数据 25
2.2.2 scanf函数—格式化输入数据 28
2.2.3 sprintf函数—输出格式化数据到指定的数组中 30
2.2.4 sscanf函数—从字符串读取格式化数据 31
2.2.5 vprintf函数—在屏幕上输出格式化变长参数列表 33
2.2.6 vscanf函数—读取从键盘输入的格式化数据 34
2.3 文件输入/输出函数 35
2.3.1 fgetc函数和getc函数—从文件中读取一个字符 35
2.3.2 fgets函数—从文件中读取多个字符 36
2.3.3 fprintf函数—格式化输出数据到指定的文件中 38
2.3.4 fscanf函数—从文件中读取格式化数据 39
2.3.5 fputc函数和putc函数—输出一个字符到指定的文件中 40
2.3.6 fputs函数—输出一个字符串到指定的文件中 42
2.3.7 fread函数—从文件中读取一个数据块 43
2.3.8 fwrite函数—向文件中写入数据块 44
2.3.9 vfprintf函数—输出格式化数据到指定的文件 46
2.3.10 vfscanf函数—从文件中读取 格式化数据 47
2.4 文件定位函数 48
2.4.1 fseek函数—移动文件位置指针到指定位置 49
2.4.2 ftell函数—得到文件位置指针的当前值 50
2.4.3 rewind函数—将文件位置指针移动到文件的开头 51
2.5 文件存取操作函数 53
2.5.1 fclose函数—关闭文件 53
2.5.2 fflush函数—将缓冲区的内容写入文件 54
2.5.3 fopen函数—打开文件 55
2.5.4 remove函数—删除文件 57
2.5.5 rename函数—重命名文件 58
2.6 文件错误控制函数 60
2.6.1 clearerr函数—清除文件中的错误标志 60
2.6.2 feof函数—是否到了文件末尾 61
2.6.3 ferror函数—检查文件操作是否出现了错误 62
2.7 文件输入/输出函数综合应用范例 64
第3章 string.h库函数 70
string.h库函数主要包括常用的字符串操作函数。例如,其中的strcmp函数用来比较两个字符串的大小,strcpy函数用来将一个字符串拷贝到另一个字符串中,strcat函数用来将两个字符串连接在一起。
3.1 字符串比较函数 70
3.1.1 memcmp函数和memicmp函数—比较两个字符串 70
3.1.2 strcmp函数和stricmp函数—比较两个字符串 72
3.1.3 strncmp函数和strnicmp函数—比较两个字符串 74
3.2 字符串拷贝函数 75
3.2.1 memcpy函数—拷贝n个字节到另一个数组 75
3.2.2 memmove函数—拷贝n个字节到数组中(可重叠) 76
3.2.3 strcpy函数—字符串拷贝 77
3.2.4 strncpy函数—拷贝n个字符到目的字符数组 78
3.3 字符串连接函数 80
3.3.1 strcat函数—连接两个字符串 80
3.3.2 strncat函数—将字符串1的前n个字符连接到字符串2 81
3.4 字符串查找函数 82
3.4.1 memchr函数—在内存块中查找字符 83
3.4.2 strchr函数—在字符串中查找字符 84
3.4.3 strstr函数—查找字符串 85
3.4.4 strtok函数—分解字符串 87
3.5 字符串转换函数 88
3.5.1 strlwr函数—将大写字母转换为小写字母 88
3.5.2 strrev函数—将字符串逆置 90
3.5.3 strupr函数—将小写字母转换为大写字母 91
3.6 其他函数 92
3.6.1 memset函数—用指定的字符填充字符串 92
3.6.2 strlen函数—求字符串的长度 93
3.7 字符串函数综合应用范例 94
第4章 stdlib.h库函数 99
stdlib.h库函数主要包括字符串转换函数、动态内存管理函数、过程控制函数等。例如,atof 函数是将字符串转换为双精度浮点数,malloc函数是分配内存空间,abort函数用来终止当前的进程。
4.1 字符串转换函数 99
4.1.1 atof函数—将字符串转换为双精度浮点数 99
4.1.2 atoi函数—将字符串转换为整数 101
4.1.3 atol函数—将字符串转换为长整型数 102
4.1.4 strtod函数—将字符串转换为双精度浮点数 103
4.1.5 strtol函数—将字符串转换为长整型数 104
4.2 动态内存管理函数 106
4.2.1 malloc函数—分配内存空间 106
4.2.2 calloc函数—分配内存空间并初始化 107
4.2.3 free函数—释放内存空间 109
4.2.4 realloc函数—重新分配内存空间 111
4.2.5 动态内存管理函数综合应用范例 112
4.3 随机数生成函数 116
4.3.1 rand函数—产生伪随机数 116
4.3.2 srand函数—初始化随机数发生器 117
4.4 查找函数和排序函数 118
4.4.1 bsearch函数—折半查找 118
4.4.2 qsort函数—快速排序 119
4.4.3 排序函数和查找函数综合应用范例 121
4.5 过程控制函数 123
4.5.1 abort函数—终止当前进程 123
4.5.2 exit函数—退出当前程序 126
4.5.3 system函数—执行系统命令 127
第5章 math.h库函数 129
math.h 库函数主要包括三角函数、指数和对数函数、幂指数和开方函数等。例如,cos 函数用来求角度的余弦值,log 函数用来求自然对数,pow 10函数用来求10exp的值。
5.1 三角函数 129
5.1.1 cos函数—求角度的余弦值 129
5.1.2 sin函数—求角度的正弦值 130
5.1.3 tan函数—求角度的正切值 131
5.1.4 acos函数—求角度的反余弦值 132
5.1.5 asin函数—求角度的反正弦值 133
5.1.6 atan函数—求角度的反正切值 134
5.2 指数和对数函数 136
5.2.1 exp函数—求以自然数e为底的指数值 136
5.2.2 log函数—求自然对数 137
5.2.3 log10函数—求对数 138
5.3 幂指数和开方函数 139
5.3.1 pow函数—求baseexp的值 139
5.3.2 pow10函数—求10exp的值 140
5.3.3 sqrt函数—求平方根 141
5.4 绝对值函数 142
5.4.1 abs函数—求整数的绝对值 143
5.4.2 fabs函数—求浮点数的绝对值 144
5.4.3 labs函数—求长整型数据的绝对值 145
5.5 其他函数 146
5.5.1 floor函数—求不大于x的最大整数 146
5.5.2 fmod函数—返回x/y的余数 147
5.5.3 frexp函数—将浮点数分解为尾数和指数 148
5.5.4 hypot函数—根据直角边求斜边 149
5.5.5 modf函数—将浮点数分解为整数部分和小数部分 151
5.5.6 poly函数—计算xn的值 152
5.6 数学函数综合应用范例 153
5.6.1 计算方程的根 153
5.6.2 求整数序列的第i个元素 155
5.6.3 求2s+2t的第 10项 156
第6章 stdarg.h库函数 159
stdarg.h 库函数主要包括3个用来处理变长参数的宏。例如,va_arg宏用来获取下一个参数,va_start宏用来初始化变长参数列表。
6.1 va_arg宏 159
6.2 va_start宏 161
6.3 va_end宏 162
6.4 可变参数函数综合应用范例 164
第7章 time.h库函数 166
time.h 库函数主要包括一些时间处理函数。例如,其中的 time 函数用来得到当前的时间,ctime 函数用来将时间转换为字符串形式。
7.1 时间操作函数 166
7.1.1 clock函数—返回CPU时钟计时单元 166
7.1.2 difftime函数—计算两个时钟之间的间隔 167
7.1.3 time函数—得到当前的时间 169
7.2 时间格式转换函数 170
7.2.1 asctime函数—将时间格式转换为字符串形式 170
7.2.2 ctime函数—将时间转换为字符串形式 171
7.2.3 gmtime函数—返回(格林尼治)时间结构的指针 172
7.2.4 localtime函数—返回指向时间结构的指针 174
7.2.5 mktime函数—将struct tm格式的时间转换为秒 175
7.2.6 strftime函数—将时间格式化为字符串 176
第 2篇 算法篇
第8章 排序算法 180
排序算法是程序设计中较为常用的算法。排序算法主要包括插入排序、交换排序、选择排序、归并排序和基数排序。
8.1 插入排序 180
8.1.1 直接插入排序 180
8.1.2 折半插入排序 182
8.1.3 希尔排序 185
8.2 交换排序 187
8.2.1 冒泡排序 188
8.2.2 快速排序 191
8.3 选择排序 195
8.3.1 简单选择排序 195
8.3.2 堆排序 199
8.4 归并排序 205
8.5 基数排序 207
第9章 查找算法 214
查找算法是程序设计中常用的算法。查找算法主要包括基于线性表的查找、基于树的查找和哈希表的查找。
9.1 基于线性表的查找 214
9.1.1 顺序查找 214
9.1.2 折半查找 216
9.1.3 分块查找 219
9.2 基于树的查找 222
9.2.1 基于二叉排序树的查找操作 222
9.2.2 基于二叉排序树的插入操作 224
9.3 哈希表的查找 227
9.3.1 构造哈希表 227
9.3.2 处理冲突 229
第 10章 递推算法 234
递推算法是通过不断迭代,用旧的变量值递推得到新值。递推算法常用来解决重复计算的问题,如斐波那契数列、存取问题等。
10.1 顺推法 234
10.1.1 斐波那契数列 234
10.1.2 将十进制数转换为二进制数 236
10.1.3 求最大公约数和最小公倍数 238
10.1.4 质因数的分解 240
10.1.5 角谷猜想 241
10.1.6 母牛生小牛问题 242
10.1.7 杨辉三角 243
10.2 逆推法 245
10.2.1 猴子摘桃问题 245
10.2.2 存取问题 246
第 11章 枚举算法 248
枚举算法也称穷举算法,它是编程中常用的一种算法。在解决某些问题时,可能无法按照一定规律从众多的候选解中找出正确的答案。此时,可以从众多的候选解中逐一取出候选答案,并验证候选答案是否为正确的解。
11.1 判断n是否能被3、5、7整除 248
11.2 百钱买百鸡 251
11.3 五猴分桃 252
11.4 求最大连续子序列和 254
11.5 填数游戏 256
11.6 谁在说谎 257
第 12章 递归算法 260
递归是自己调用自己,它将一个复杂的问题进行整体考虑,只要知道最基本问题的答案,就可以得到整个问题的答案。常见的递归问题有阶乘、斐波那契数列和最大公约数等。
12.1 简单递归 260
12.1.1 求n的阶乘 260
12.1.2 斐波那契数列 263
12.1.3 求n个数中的最大者 265
12.1.4 进制转换 266
12.1.5 求最大公约数 267
12.2 复杂递归 268
12.2.1 逆置字符串 268
12.2.2 和式分解 270
12.2.3 和式分解(分解出的和数非递 增排列) 272
12.2.4 求无序序列中的第k大 元素 273
12.2.5 从1~n个自然数中任选r个 数的所有组合数 275
12.2.6 大牛生小牛问题 277
第 13章 贪心算法 279
贪心算法是一种不追求最优解,只希望找到较为满意解的方法。贪心算法省去了为找最优解要穷尽所有可能而必须耗费的大量时间,因此,它一般可以快速得到比较满意的解。贪心算法常以当前情况为基础做最优选择,而不考虑各种可能的整体情况,所以贪心算法不需要回溯。
13.1 找零钱问题 279
13.2 哈夫曼编码 281
13.3 加油站问题 288
第 14章 回溯算法 290
回溯算法也称为试探法,是一种选优搜索法。该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按照某种顺序逐一枚举和检验。当发现当前的候选解不可能是解时,就选择下一个候选解;倘若当前候选解只是不满足问题的规模要求,但满足所有其他要求时,则继续扩大当前候选解的规模,并继续向前试探。如果当前的候选解满足包括问题规模在内的所有要求,则该候选解就是问题的一个解。在寻找解的过程中,放弃当前候选解,退回上一步重新选择候选解的过程就称为回溯。
14.1 和式分解(非递归实现) 290
14.2 填字游戏 293
14.3 装箱问题 297
第 15章 分治算法 300
分治算法是将一个规模为N的问题分解为K个规模较小的子问题进行求解,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。最大子序列和、求x的n次幂、众数问题等就是利用分治算法来实现的。
15.1 最大子序列和问题 300
15.2 求x的n次幂 302
15.3 众数问题 304
15.4 求n个数中的最大者和最小者 306
15.5 整数划分问题 308
15.6 大整数的乘法问题 310
第 16章 矩阵算法 315
矩阵算法主要通过分析数组中元素值的变化规律,巧妙利用数组下标与元素值之间的关系设计算法。矩阵算法往往需要交换或者存取矩阵中的某个元素,这就需要灵活掌握二维数组两个下标的变换。
16.1 打印拉丁方阵 315
16.2 打印蛇形方阵 317
16.3 打印螺旋矩阵(非递归和递归实现) 318
16.4 打印逆螺旋矩阵 321
16.5 将矩阵旋转90度 322
16.6 将上三方阵以行序为主序转换为以列序为主序 324
第 17章 实用算法 327
在学习和工作中,经常会遇到一些与实际生活紧密相关的问题,这些问题也可通过算法来得到答案,从而大大提高我们的学习和工作效率。比较常见的实用算法有计算一年中的第几天、大小写金额转换、微信抢红包问题、求算术表达式的值、一元多项式的乘法、大整数乘法。
17.1 一年中的第几天 327
17.2 大小写金额转换 329
17.3 将15位身份证号转换为18位 333
17.4 微信抢红包问题 335
17.5 求算术表达式的值 336
17.6 一元多项式的乘法 345
17.7 大整数乘法 351
17.8 迷宫求解 353
第 18章 程序调试技术 359
程序调试也是程序员必备的一项技能。对于初学者来说,通过不断调试程序,既验证了程序的正确性,又深入地理解了程序的算法思想,提高了调试程序的能力,为今后深入学习计算机的其他内容打下坚实的基础。
18.1 为什么要调试程序 359
18.2 程序调试 360
18.2.1 如何使用Visual Studio 2019开发 环境调试程序 360
18.2.2 冒泡排序程序调试 366
18.2.3 合并链表程序调试 371
以下章节见电子资源
第3篇 C++输入/输出流与容器篇
第 19章 ios_base类 379
ios_base类主要是C++输入/输出流的基类,它主要包含流的格式化函数。例如,flags函数用来获取或设置流格式,precision函数用来得到/设置浮点数的精度。
19.1 flags函数—得到/设置流的格式标志 380
19.2 setf函数和unsetf函数—设置和清除流的格式标志 381
19.3 precision函数—得到/设置浮点数的精度 383
19.4 width函数—得到/设置域宽 384
第 20章 iostream类 386
iostream 类派生自istream类和 ostream类。iostream 类中的函数非常常用。例如,isotream类的对象cout用来控制输出、cin用来控制输入。
20.1 get函数—无格式的输入操作 388
20.2 getline函数—接受输入的字符串 390
20.3 ignore函数—忽略指定的字符 391
20.4 peek函数—从流中接受输入的字符 392
20.5 read函数—读取一个字符块 393
20.6 putback函数—将读取的字符返回给输入流 394
20.7 put函数—输出字符 396
20.8 fill函数—得到/设置填充字符 397
第 21章 文件流类 399
ifstream类、ofstream类和fstream类都是对文件进行读/写操作的类,我们将这些类统称为文件流类。在C++中,要对文件进行读/写操作,就需要先将文件流类与文件关联起来(一般采用open的方式或构造函数的方式),然后再利用文件流对文件进行操作。
21.1 ifstream构造函数—创建输入流对象 400
21.2 rdbuf函数—返回指向filebuf的指针 401
21.3 is_open函数—检测文件是否被打开 403
21.4 open函数和close函数—打开和关闭文件 404
21.5 read函数和write函数—从流中读取数据和向流中写入数据 406
21.6 seekg函数和tellg函数—设置和得到流的位置指针位置 407
21.7 seekp函数和tellp函数—设置和得到文件的位置指针位置 409
21.8 flush函数—刷新输出流缓冲区 411
第 22章 string类 412
string类主要用于消除对char*的使用,以保持与现有代码的兼容性,它还会自动进行内存管理,便于对字符进行操作,其性能比使用char*更佳。
22.1 字符串运算符函数 412
22.1.1 字符串构造函数—构造字符 串对象 412
22.1.2 =运算符函数—将字符串内容 拷贝到新字符串对象 414
22.1.3 +和+=运算符函数—连接 字符串 415
22.1.4 ==、!=、<、>、<=、>=运算符 函数—比较字符串 417
22.1.5 []运算符函数—返回string中 的某个字符 418
22.1.6 at函数—返回string中的某个 字符(范围检测) 419
22.2 字符串迭代器函数 420
22.2.1 begin函数和end函数—返回 第 一个字符和最后一个字符的 迭代器 420
22.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 422
22.3 字符串长度函数 423
22.3.1 length函数和size函数—返回 字符个数 423
22.3.2 max_size函数—返回string能 容纳的最大字符个数 424
22.3.3 capacity函数—返回分配的 存储空间大小 425
22.3.4 resize函数—设置string的 长度 427
22.3.5 reserve函数—为string对象 预留空间 428
22.3.6 empty函数—判断string是否 为空 429
22.4 字符串操作函数 430
22.4.1 insert函数—判断string是否 为空 430
22.4.2 erase函数—清除string中的 字符 432
22.4.3 replace函数—置换string中的 字符 433
22.4.4 swap函数—交换两个字符串 的内容 436
22.4.5 c_str函数—返回与string 等效的字符串 437
22.4.6 copy函数—取出string对象中 的指定字符 438
22.4.7 find函数—在string对象中 查找字符串 439
22.4.8 find_first_of函数和find_last_of 函数—在string中查找字符串 (部分匹配) 441
22.4.9 substr函数—生成string的 子串 442
22.4.10 stoi函数—将字符串中的 数字转换为整数 444
第 23章 vector类 446
vector类是C++中常用的容器类,包括了一些常用的函数实现,用户无须重新编写函数即可使用。例如,size 函数用来表示向量的大小,empty函数用来表示向量是否为空,push_back函数用来向向量中追加元素。
23.1 构造类函数 446
23.1.1 vector的构造函数和析构 函数—创建vector对象和 释放vector对象 446
23.1.2 operator=函数—拷贝vector中 的内容 448
23.2 迭代器函数 449
23.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的后 一个位置 449
23.2.2 rbegin函数和rend函数—返回 与最后一个元素和第 一个元素 相关的迭代器 450
23.3 容量类函数 452
23.3.1 size函数、max_size函数和capacity 函数—返回元素的实际个数、 能容纳的最大元素个数和分配的 存储空间大小 452
23.3.2 empty函数—判断vector是否 为空 453
23.3.3 resize函数—调整vector容器 的大小 455
23.3.4 reserve函数—重新为vector 容器分配内存空间 456
23.4 存取类函数 457
23.4.1 operator[]函数—存取vector中 的元素 457
23.4.2 at函数—存取vector中的元素 (进行越界检查) 459
23.4.3 front函数和back函数—返回 vector中的第 一个元素和最后 一个元素 460
23.5 操作类函数 461
23.5.1 assign函数—为vector中的 元素赋值 462
23.5.2 push_back函数—在vector的 末尾追加新元素 463
23.5.3 pop_back函数—删除vector中 的最后一个元素 464
23.5.4 insert函数—在vector中插入 元素 466
23.5.5 erase函数—删除vector中指定 的元素 467
23.5.6 clear函数—清除vector中的 元素 469
23.5.7 swap函数—交换两个vector 中的内容 470
第 24章 deque类 472
deque类是C++的双端队列。它主要包括求队列的大小函数、元素的存取函数、向队列中插入元素和删除元素的函数等。
24.1 构造类函数 472
24.1.1 deque的构造函数和析构 函数—创建deque对象和 释放deque对象 472
24.1.2 operator=函数—拷贝deque中 的内容 474
24.2 迭代器函数 475
24.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的 后一个位置 476
24.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 477
24.3 容量类函数 478
24.3.1 size函数和max_size函数— 返回元素的实际个数和能容纳的 最大元素个数 478
24.3.2 empty函数—判断deque是否 为空 480
24.3.3 resize函数—调整deque容器 的大小 481
24.4 存取类函数 483
24.4.1 operator[]函数—存取deque中 的元素 483
24.4.2 at函数—存取deque中的元素 (进行越界检查) 484
24.4.3 front函数和back函数—返回 deque中的第 一个元素和最后一 个元素 486
24.5 操作类函数 487
24.5.1 assign函数—为deque中的 元素赋值 487
24.5.2 push_back函数—在deque的 末尾追加新元素 489
24.5.3 push_front函数—在deque的 开始位置插入新元素 490
24.5.4 pop_back函数—移除deque中 的最后一个元素 491
24.5.5 pop_front函数—移除deque中 的第 一个元素 492
24.5.6 insert函数—在deque的指定 位置插入元素 494
24.5.7 erase函数—删除deque中指定 的元素 495
24.5.8 clear函数—清除deque中的 所有元素 497
24.5.9 swap函数—交换两个deque中 的内容 498
第 25章 list类 501
list类是C++的链表容器。它主要包括求链表的大小函数、元素的存取函数、链表的操作函数。例如,push_front函数在链表的开始插入元素,push_back函数在链表的末尾插入元素,unique函数删除链表中重复的元素。
25.1 构造类函数 501
25.1.1 list的构造函数和析构函数— 创建list对象和释放list 对象 501
25.1.2 operator=函数—拷贝list中的 内容 503
25.2 迭代器函数 505
25.2.1 begin函数和end函数—返回 第 一个元素和最后一个元素的 后一个位置 505
25.2.2 rbegin函数和rend函数—返回 相对于begin函数和end函数的 反向迭代器 506
25.3 容量类函数 508
25.3.1 size函数和max_size函数— 返回元素的实际个数和能容纳的 最大元素个数 508
25.3.2 empty函数—判断list是否 为空 510
25.3.3 resize函数—调整list的 大小 511
25.4 存取类函数 513
25.4.1 front函数—返回list中的 第 一个元素 513
25.4.2 back函数—返回list中的 最后一个元素 514
25.5 操作类函数 515
25.5.1 assign函数—为list中的元素 赋值 515
25.5.2 push_back函数—在list的末尾 追加新元素 517
25.5.3 push_front函数—在list的 开始位置插入新元素 518
25.5.4 pop_back函数—移除list 中的最后一个元素 519
25.5.5 pop_front函数—移除list中的 第 一个元素 520
25.5.6 insert函数—在list的指定位置 插入元素 522
25.5.7 erase函数—删除list中指定的 元素 523
25.5.8 clear函数—清除list中的所有 元素 525
25.5.9 swap函数—交换两个list中的 内容 526
25.5.10 splice函数—将一个list 中的元素移动到另一个 list 528
25.5.11 remove函数—从list中移除 指定的元素 529
25.5.12 remove_if函数—删除list中 不等于迭代器指向的函数 531
25.5.13 unique函数—删除list中重复 的元素 532
25.5.14 merge函数—将两个list链表 合并 534
25.5.15 sort函数—对list中的元素 排序 535
25.5.16 reverse函数—将list中的 元素逆置 537
第 26章 stack类 539
stack类是C++的栈容器。它主要包括求栈的大小函数和存取函数。例如,top函数返回栈顶元素,push函数在栈顶位置插入新元素,pop函数删除栈顶元素。
26.1 构造类函数 539
26.2 容量类函数 541
26.2.1 empty函数—判断stack 是否为空 541
26.2.2 size函数—返回stack中的 元素个数 542
26.3 存取类函数 543
26.4 操作类函数 544
26.4.1 push函数—在stack的栈顶 位置插入新元素 544
26.4.2 pop函数—移除stack的栈 顶元素 546
第 27章 queue类 548
queue类是C++的队列容器。它主要包括队列的存取函数和一些判断队列的状态函数。例如,front函数用来存取队头元素,back函数用来存取队尾元素。
27.1 构造类函数 548
27.2 容量类函数 550
27.2.1 empty函数—判断queue 是否为空 550
27.2.2 size函数—返回queue的 大小 551
27.3 存取类函数 552
27.3.1 front函数—返回queue的 队头元素 552
27.3.2 back函数—返回queue的 队尾元素 553
27.4 操作类函数 554
27.4.1 push函数—在queue队尾 插入新元素 554
27.4.2 pop函数—移除queue的 队头元素 556
第 28章 set类 558
set类是C++的集合容器。它主要包括求集合的大小函数和其他操作函数。例如,find函数返回要查找元素的迭代器,lower_bound函数返回大于等于某个值的第 一个元素的迭代器。
28.1 构造类函数 558
28.2 迭代器类函数 560
28.2.1 begin函数和end函数—返回 set的第 一个元素和最后一个元 素的迭代器 560
28.2.2 rbegin函数和rend函数—返回 set中的最后一个元素和第 一个 元素的反向迭代器 562
28.3 容量类函数 563
28.3.1 empty函数—判断set是否 为空 563
28.3.2 size函数—返回set的 大小 564
28.3.3 max_size函数—返回set能 容纳的最大元素个数 565
28.4 操作类函数 567
28.4.1 insert函数—在set中插入新 元素 567
28.4.2 swap函数—交换两个set中的 内容 568
28.4.3 erase函数—清除set中的 元素 570
28.4.4 clear函数—清空set中的 元素 572
28.4.5 find函数—查找set中的 元素 573
28.4.6 count函数—统计set中某一个 元素的个数 574
28.4.7 lower_bound函数和upper_bound 函数—返回set中元素下界和 上界的迭代器 576
28.4.8 equal_range函数—返回set中 元素x的下限和上限 577
第 29章 map类 579
map 类是 C++的映射容器。它主要包括求map容器大小的函数、元素的存取函数和查找操作函数。例如,insert函数是插入一个元素到map中,erase函数是清除map中的元素。
29.1 构造类函数 580
29.1.1 map的构造函数和析构函数— 创建map对象和释放map 对象 580
29.1.2 map的赋值构造函数—通过一 个map对象为另一个map对象 赋值 581
29.2 迭代器类函数 583
29.2.1 begin函数和end函数—返回 第 一个元素的位置和最后一个 元素的后一个位置 583
29.2.2 rbegin函数和rend函数—返回 指向map中最后一个元素的反 向迭代器和第 一个元素之 前的反向迭代器 584
29.3 容量类函数 585
29.3.1 empty函数—判断map是否 为空 585
29.3.2 size函数—返回map容器中的 元素个数 587
29.3.3 max_size函数—返回map容器 能容纳的最大元素个数 588
29.4 存取类函数 589
29.5 操作类函数 590
29.5.1 insert函数—在map中插入 新元素 590
29.5.2 erase函数—移除map中的 元素 592
29.5.3 swap函数—交换两个map中 的内容 594
29.5.4 clear函数—清除map中的 所有元素 595
29.5.5 count函数—统计map中某个 元素关键字的个数 596
29.5.6 find函数—查找map中的 元素 598
· · · · · · (收起)
0 有用 Marvin不慌 2023-03-20 15:50:21 北京
本书系统地讲解了C和C++中的常用函数及算法,结构清晰、范例具体、讲解详细,是一本内容丰富的案头工具书,内容通俗易懂,初学者也能轻松理解。
0 有用 Marvin不慌 2023-03-20 15:50:21 北京
本书系统地讲解了C和C++中的常用函数及算法,结构清晰、范例具体、讲解详细,是一本内容丰富的案头工具书,内容通俗易懂,初学者也能轻松理解。