问题发源于我打 treap 时想用结构体来记录树上各节点的数据:
struct Node {
int val, cnt, size, rd, son[2];
} tree[N];
但这样的话代码会变得非常的长,看着很糟糕:
inline void push_up(int p) {
tree[p].size = tree[tree[p].son[0]].size + tree[tree[p].son[1]].size + tree[p].cnt;
}
对比一下直接定义在外面:
int val[N], cnt[N], size[N], rd[N], son[N][2];
inline void push_up(int p) {
size[p] = size[son[p][0]] + size[son[p][1]] + cnt[p];
}
但是感觉定义在结构体里看 debug 比较清晰,而且也不想把变量都这么散在外面。
所以想知道有没有什么办法能在用结构体记录的前提下减少代码量qwq。
我有个思路是在函数里用引用:
int &m = maximum;
这样在外部变量命名需要很长的前提下在函数内使用可以比较短,比较方便qwq。
但是不知道引用结构体里的变量,各位大佬知道什么吗qwq
//并不能这么打,不符合语法QAQ
int &v[] = tree[].val;
//用函数或许可以,但是感觉二维数组会变得好丑QAQ
inline int v(int x) {
return tree[x].val;
}