C/C++ 语法教程(4)——运算符优先级与常用函数
Contents
运算符优先级与常用函数
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