一个宏:
#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
语句不受影响
完结撒花
我取得这一发现之后在机房进行了大力安利,不过不知道为啥没有被普及
快两年过去了,再来炒一波冷饭(
这东西真的很好用啊!
标签:do,平生,...,args,while,伟大,高亮,发明,define From: https://www.cnblogs.com/Xiwon/p/17783660.html