写算法题的时候有很多神奇操作,如果不常用的话,用的时候就会忘记那种最方便最快的写法,没理由舍弃更加优美的代码
所以想把很多日月积累的 cpp 在算法中的应用方法记下来,以便熟练运用
# using
using vi = vector<int>;
using vii = vi::iterator;
vi myVector{0, 1, 2, 3, 4};
for (vii iter = myVector.begin(); iter != myVector.end(); iter++) {
cout << "the value: " << *iter << endl;
}
# 读 char 使用 % s
为了防止题目给出的数据结尾多一个空格或者回车
那么正确的逻辑代码页不能 AC,用 % s 读字符就不会存在这个问题,% s 会自动跳过
char op[2];
int a, b;
scanf("%s%d%d", op, &a, &b);
if (*op == 'M')
p[find(a)] = find(b);
# 常量值的选取
const int N = 1e6 + 10;
const int N = 100010;
# 常用宏定义
typedef long long LL;
typedef unsigned long long ULL;
#define LL long long
#define FastIO \
ios::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0);
#define PB push_back
# 声明变量
int 尽量使用逗号开空间
不赋值比赋值快 10ms
# 位运算相关
int s = x >> i & 1;
# 数据精度相关
浮点数二分: r - l > 1e-8 数据要求 -6, 多开两位精度防止出错
# 美化代码
使用逗号操作符使代码更加美观
合理使用 ++ 和 ++ 使代码更加美观
# puts("");
输出一个空行的简单写法,里面放字符串的话自动添加空行,适用于输出类似 Yes No 的情况
# 十六进制
无穷大:0x3f3f3f3f (opens new window)
int null = 0x3f3f3f3f;
# 字符串加速操作
if (!strcmp (op, "I")) 更快, 相比于 string == “ efwefwe”
# memset
// https://www.cplusplus.com/reference/cstring/memset/
memset(h, 0x3f, sizeof h); // 快速的将一个数组中的元素全部变为无穷大
# 出现 SF 可以用删代码法
栈溢出
删一次执行一次,直到不痴线 SF 之后,那说明那一段代码就是栈溢出的代码