其他常用操作! 本资料常用的头文件:<iostream>、<cstdlib>、<cstring>、<fstream>以及<algorithm>、 <stack>、<queue>、<vector>等。 C++的流、容器、算法等都需要引用std命名空间。所以需要在#include后面、你的代码前面加上一句:using namespace std; (1)库函数 1. 数组的整体操作: 头文件:<cstring> 将a[]初始化:memset(a,0, sizeof(a)); 第二个参数应该传入0、-1或0x7F。传入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 的余数。当然,这是浮点数的版本。
|