其他常用操作!

[复制链接]
发表于 2023-12-31 10:40:11 | 显示全部楼层 |阅读模式
其他常用操作!
本资料常用的头文件:<iostream>、<cstdlib>、<cstring>、<fstream>以及<algorithm>、
<stack>、<queue>、<vector>等。
C++的流、容器、算法等都需要引用std命名空间。所以需要在#include后面、你的代码前面加上一句:using namespace std;
(1)库函数
1.  数组的整体操作:
头文件:<cstring>
Ÿ  将a[]初始化:memset(a,0, sizeof(a));
第二个参数应该传入0-10x7F。传入0或-1时,a[]中每个元素的值都是0或-1;如果传入0x7F时,那么a[]中每个元素的值都是0x7F7F7F7F(不是0x7F!),可认为是“无穷大”。
Ÿ  将a[]整体复制到b[]中:memcpy(b,a, sizeof(a));
Ÿ  判断a[]和b[]是否等价:memcmp(a,b, sizeof(a));    // 返回0表示等价
2.  字符操作:头文件:<cctype>
Ÿ  tolower(c)、toupper(c):将c转化为小写或大写。
Ÿ  isdight(c)、isalpha(c)、isupper(c)、islower(c)、isgraph(c)、isalnum(c):分别判断c是否为十进制数字、英文字母、大写英文字母、小写英文字母、非空格、字母或数字。
3.  最大值/最小值:
头文件:<algorithm>
max(a,b)返回a和b中的最小值,min(a,b)返回a和b中的最大值。
其实我们可以自己写:
4.  交换变量的值:swap(a,b)头文件:<algorithm>
其实我们可以自己写:inlinevoid swap(int &a, int &b) { int t=a; a=b; b=t; }
5.  执行DOS命令或其他程序:system("命令行");
Ÿ  头文件:<cstdlib>
Ÿ  暂停屏幕:system("pause");
Ÿ  竞赛交卷或OJ提交代码之前必须删除system,否则会被视为作弊(如果是tyvj甚至都无法提交)。
Ÿ  如果使用输入重定向,那么命令提示符不会接受任何键盘输入——直接用文件内容代替键盘了。
6.  立刻退出程序:exit(0);
这种方法常用于深度优先搜索。执行后,程序立刻停止并返回0,所以在调用前应该输出计算结果。
头文件:<cstdlib>
7.  计时:doublea = (double)clock() / (double)CLOCKS_PER_SEC;
上面的a对应一个时刻。而将两个时刻相减,就是时间间隔。可用这种方法卡时。
头文件:<ctime>
8.  断言:assert(条件)
Ÿ  条件为假时,程序立刻崩溃。
Ÿ  头文件:<cassert>
Ÿ  如果定义了NDEBUG符号,那么它将不会起任何作用。
Ÿ  断言和错误处理不同:例如出现“人数为负数”的情况,如果责任在于用户,那么应该提示错误并重新输入,而不是用断言;如果发生在计算过程,应该用断言来使程序崩溃,以帮助改正代码中的错误。
换句话说,错误处理防的是用户的错误,断言防的是代码的错误。
9.  快速排序:qsort(首项的指针,待排序元素个数, 每个元素所占字节, 比较函数)
Ÿ  头文件:<cstdlib>
Ÿ  这是留给C党的快速排序,它比STL的排序算法啰嗦一些。
Ÿ  比较函数返回int类型,用于对两个元素的比较。原型如下:
int compare(const void *i, const void*j);
如果*i<*j,则应返回一个小于0的数;如果*i==*j则应返回0,否则返回一个大于0的数。
10. 随机数发生器:
Ÿ  头文件:<cstdlib>
Ÿ  产生随机数:
①  0~32767的随机数:rand()
②  粗略地控制范围:rand()%范围
  注意,这种方法产生的随机数的分布是不均匀的。
③  精确地控制范围:(double)rand()/RAND_MAX*范围
④  控制在[a,b)之间:a + (int) ((double)rand()/RAND_MAX*(b-a))
Ÿ  初始化随机数种子:
①  srand(数字):初始化随机数种子。
②  注意,这条语句在程序开头使用,并且最多用一次。同一程序、同一平台,srand中的参数相等,用rand()产生的随机数序列相同。
③  使随机数更加随机:引用<ctime>,然后这样初始化随机数种子,srand(time(NULL))。
  不要在循环中使用这条语句(例如批量产生随机数据),因为time只精确到秒。
11. 数学函数:
Ÿ  头文件:<cmath>
Ÿ  abs(x):求 x 的绝对值(该函数同时包含于<cstdlib>)。
Ÿ  sin、cos、tan、asin、acos、atan:三角函数,角的单位为弧度。
可用atan(1)*4表示π
Ÿ  sinh、cosh、tanh、asinh、acosh、atanh:双曲函数
Ÿ  sqrt:求平方根
Ÿ  ceil(x)、floor(x):分别返回大于等于x 的最小整数、小于等于 x 的最大整数。注意,参数和返回值都是浮点数类型。
Ÿ  exp(x)、log(x)、log10:分别求ex、lnx、lgx
(顺便提一句,指数可以把加法问题转化为乘法问题,对数可以把乘法问题转化为加法问题。)
Ÿ  pow(a,b):计算 ab。由于精度问题,你仍然需要学会快速幂。
Ÿ  fmod(a,b):计算 a 除以 b 的余数。当然,这是浮点数的版本。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表