平生最伟大发明!
一个宏:
#define rep0(n) for (int i = 1, limi = n; i <= limi; ++i)
#define repa(i, n) for (int i = 1, limi = n; i <= limi; ++i)
#define repb(i, l, r) for (int i = l, limi = r; i <= limi; ++i)
#define repc(i, r, l, _) for (int i = r, limi = l; i >= limi; --i)
#define M5(a, b, c, d, e, ...) e
#define do(args...) M5(args, repc, repb, repa, rep0)(args)
它是 for 的一种 define。用法:
do (n) { // 变量 i 遍历 1 ~ n
// ...
}
do (j, n) { // 变量 j 遍历 1 ~ n
// ...
}
do (k, l, r) { // 变量 k 遍历 l ~ r
// ...
}
do (i, r, l, _) { // 变量 i 从 r 递减到 l, 第四个参数用来占位
// ...
}
用它可以提高冲题效率!/se
比如:
do (n) a[i] = read(); // 读入一列数
do (n) do (j, m) // 读入矩阵
w[i][j] = read();
等等
同时,do while 语句的使用不受影响
原理与思路
我们看到,很多人用的循环宏都类似于:REP, rep,FOR,For,FF,rof, ROF 这样的东西
他们很难用,因为不同的循环方式被定义成了不同的宏名
并且,虽然有的人通过不定参数宏实现了多种循环合一,他还是很丑陋
因为正常的 for 是有高亮的。自己定义的 FOR 或者 For 没有高亮
那能不能有这样一种宏,它:
- 既集成各种功能于一体
- 又简单易写,又在任何代码展示时都能有和谐的高亮
呢?
要想有高亮,就必须把某一关键字定义成宏
左找右找,我们最后发现,do 这个关键字,它只是为了 do while 而存在,那么就用 do 试试
然后再使用变长参数的技巧,通过不同的参数个数实现多功能合一
试验一下,能用!并且神奇的是 do while 语句不受影响
完结撒花
我取得这一发现之后在机房进行了大力安利,不过不知道为啥没有被普及
快两年过去了,再来炒一波冷饭(
这东西真的很好用啊!

浙公网安备 33010602011771号