
C/C++ 语法教程(4)——运算符优先级与常用函数
运算符优先级与常用函数
C/C++ 运算符优先级关系
优先级越小越优先。
| 优先级 | 类别 | 运算符 | 结合性 |
|---|---|---|---|
| 1 | 后缀 | () [] -> . ++ - - | 从左到右 |
| 2 | 一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
| 3 | 乘除 | * / % | 从左到右 |
| 4 | 加减 | + - | 从左到右 |
| 5 | 移位 | << >> | 从左到右 |
| 6 | 关系 | < <= > >= | 从左到右 |
| 7 | 相等 | == != | 从左到右 |
| 8 | 位与 AND | & | 从左到右 |
| 9 | 位异或 XOR | ^ | 从左到右 |
| 10 | 位或 OR | | | 从左到右 |
| 11 | 逻辑与 AND | && | 从左到右 |
| 12 | 逻辑或 OR | || | 从左到右 |
| 13 | 条件 | Condition?x:y | 从右到左 |
| 14 | 赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
| 15 | 逗号 | , | 从左到右 |
但是其实一般不需要记得这么准确,毕竟疯狂加括号肯定不会有错嘛。
一些常用函数
这些函数蛮多都涉及了后面的知识,所以这里主要是先给出来。
C 标准库
string.h(C++ 就用cstring):(size_t一般就是unsigned int)memset(void *s, int c, size_t n):将已开辟内存空间 $s$ 的首 $n$ 个字节的值设置为 $c$。看似很难理解,但你一般只需要知道用memset(a,0,n*sizeof(int))表示将a[]的a[0]~a[n-1]赋值为 $0$ 即可(a[]是int数组)。(a[1]~a[n]只需要改为a+1)。当然一般只用于字符数组,这样就不用sizeof,因为本身就只占一个字节。(较常用)memcpy(void *dest, const void *src, size_t n):将以 $src$ 开头,长度为 $n$ 的内存空间里的内容拷贝到以 $dest$ 开头的内存空间里去。一般用于数组复制,比如memcpy(a,b,n*sizeof(int))指将 $b$ 的前 $n$ 个元素复制到 $a$ 的前 $n$ 个位置。(同样都是int数组)(较常用)strcpy(char *dest, const char *src):把从 $src$ 地址开始且含有 NULL 结束符的字符串复制到以 $dest$ 开始的地址空间。与memcpy相似,但是只用于char数组,并且通过结束符(\0)控制长度。strncpy(char *dest, const char *src, int n):把 $src$ 所指的字符串中以 $src$ 地址开始的前 $n$ 个字节复制到 $dest$ 所指的空间中。注意:- 如果 $src$ 中字符数大于等于 $n$,则 $dest$ 中不含有
\0; - 否则,将以
\0填充 $dest$ 到完成 $n$ 个字节。
- 如果 $src$ 中字符数大于等于 $n$,则 $dest$ 中不含有
strcat(char *dest, const char *src):将这两个char数组顺序连接,结果放在 $dest$ 中。getline(istream &is, string &str, char delim):几乎无用,而且涉及输入输出流,不讲。size_t strlen(const char *string):计算string字符串或者以char *声明的字符数组的长度。(较常用)
ctype.h(C++ 就用ctype):(我基本没有听说过)tolower()/toupper():改变字母大小写。isalpha(),isdigit(),isprint():用于判断字符是否是字母,数字,可打印字符(非控制字符)。
math.h(C++ 就用cmath):double pow(double x, double y):返回 $x^y$。double floor(double x):返回 $x$ 下取整。注意返回是double。double ceil(double x):返回 $x$ 上取整。注意返回是double。int abs(int x):返回 $x$ 的绝对值。double fabs(double x):同理。但在包含了头文件cstdlib后abs也可用于浮点型。sin(),cos(),tan():三角函数,注意给定参数应该是弧度制。asin(),acos(),atan():反三角函数,注意返回值是弧度制。sinh(),cosh(),tanh():双曲函数。double exp(double x):返回 $e^x$。double log(double x):返回 $\ln x$。double sqrt(double x):返回 $\sqrt{x}$。
C++ STL
algorithm:min(),max():返回较小较大值。(较常用)lower_bound()/upper_bound():一般用lower_bound(a,a+n,x)-a查找有序(升序)数组a[0~n-1]中第一个大于等于 $x$ 的位置,upper_bound则是第一个大于。next_permutation()/prev_permutation():返回当前排列下一个或上一个排列(只要数组元素可以比较大小即可)。用的较少,用到了再细讲。sort():一般用sort(a,a+n)将数组a[0~n-1]排序为升序,用sort(a,a+n,greater<数据类型>)则是降序,如果需要用自定义比较函数bool cmp(int a,int b);则可以使用sort(a,a+n,cmp)(数据类型可换)。
- 其他 STL,比如
vector、queue、priority_queue、list、stack、map等等甚至还有号称平板电视的各类数据结构,因为大多涉及算法实现,这里仅做了解。



No Comments