C/C++ 语法教程(4)——运算符优先级与常用函数

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 标准库

  1. string.h(C++ 就用 cstring):(size_t 一般就是 unsigned int
    1. 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,因为本身就只占一个字节。(较常用
    2. memcpy(void *dest, const void *src, size_t n):将以 $src$ 开头,长度为 $n$ 的内存空间里的内容拷贝到以 $dest$ 开头的内存空间里去。一般用于数组复制,比如 memcpy(a,b,n*sizeof(int)) 指将 $b$ 的前 $n$ 个元素复制到 $a$ 的前 $n$ 个位置。(同样都是 int 数组)(较常用
    3. strcpy(char *dest, const char *src):把从 $src$ 地址开始且含有 NULL 结束符的字符串复制到以 $dest$ 开始的地址空间。与 memcpy 相似,但是只用于 char 数组,并且通过结束符(\0)控制长度。
    4. strncpy(char *dest, const char *src, int n):把 $src$ 所指的字符串中以 $src$ 地址开始的前 $n$ 个字节复制到 $dest$ 所指的空间中。注意:
      1. 如果 $src$ 中字符数大于等于 $n$,则 $dest$ 中不含有 \0
      2. 否则,将以 \0 填充 $dest$ 到完成 $n$ 个字节。
    5. strcat(char *dest, const char *src):将这两个 char 数组顺序连接,结果放在 $dest$ 中。
    6. getline(istream &is, string &str, char delim):几乎无用,而且涉及输入输出流,不讲。
    7. size_t strlen(const char *string):计算 string 字符串或者以 char * 声明的字符数组的长度。(较常用
  2. ctype.h(C++ 就用 ctype):(我基本没有听说过)
    1. tolower()/toupper():改变字母大小写。
    2. isalpha(),isdigit(),isprint():用于判断字符是否是字母,数字,可打印字符(非控制字符)。
  3. math.h(C++ 就用 cmath):
    1. double pow(double x, double y):返回 $x^y$。
    2. double floor(double x):返回 $x$ 下取整。注意返回是 double
    3. double ceil(double x):返回 $x$ 上取整。注意返回是 double
    4. int abs(int x):返回 $x$ 的绝对值。
    5. double fabs(double x):同理。但在包含了头文件 cstdlibabs 也可用于浮点型。
    6. sin(),cos(),tan():三角函数,注意给定参数应该是弧度制
    7. asin(),acos(),atan():反三角函数,注意返回值是弧度制
    8. sinh(),cosh(),tanh():双曲函数。
    9. double exp(double x):返回 $e^x$。
    10. double log(double x):返回 $\ln x$。
    11. double sqrt(double x):返回 $\sqrt{x}$。

C++ STL

  1. algorithm
    1. min(),max():返回较小较大值。(较常用
    2. lower_bound()/upper_bound():一般用 lower_bound(a,a+n,x)-a 查找有序(升序)数组 a[0~n-1] 中第一个大于等于 $x$ 的位置,upper_bound 则是第一个大于
    3. next_permutation()/prev_permutation():返回当前排列下一个或上一个排列(只要数组元素可以比较大小即可)。用的较少,用到了再细讲。
    4. 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)(数据类型可换)。
  2. 其他 STL,比如 vectorqueuepriority_queueliststackmap 等等甚至还有号称平板电视的各类数据结构,因为大多涉及算法实现,这里仅做了解。

 

点赞 0

No Comments

Add your comment