像这样:
auto&[a,b,c,d.......]=e;
后面就可以用 a,b,c,d......这样的单字符变量来表示一个结构体的成员,就避免了那个麻烦的点。
这种写法是否属于 C++14 或更低版本的特性,OI中是否能用,如果不是,那有没有一种正式比赛可用的写法可以达到上面的效果。
这种写法的本质原理是什么,是类似宏那样只是把 a 简单的替换成 e.a 然后编译,还是真的取出了 e.a 的地址,定义了一个指针,原理相当于把 a 替换为 (*pa),总之,会不会有访问结构体成员的开销,是否会导致常数变大
如果我有这样一个结构体:
struct A{int a,b,c,d;};
现有两个变量 e,f 需要处理,显然,我可以:
auto&[a1,b1,c1,d1]=e;
......
auto&[a2,b2,c2,d2]=f;
......
但这样并没有节省太多码量,要么使用双字符甚至更多字符的变量名,要么单字符变量名很快就不够用,如果我想达到这样一种效果,使得我可以用 a,b,c,d 来处理完 e 后,仍然用这 4 个字母处理 f,是否有可行的方法。
struct A{int a,b,c,d;}e,f,g[N];
void h(){int*a=&e.a,*b=&e.b,*c=&e.c,*d=&e.d;
*a...,*b...*c...,*d...;
a=&f.a,b=&f.b,c=&f.c,d=&f.d;
*a...,*b...*c...,*d...;
a=&g[1].a,b=&g[1].b,c=&g[1].c,d=&g[1].d;
*a...,*b...*c...,*d...;
}
的优化,使得在常数不会变大太多的前提下减小码量