#define的妙用
在大家编程的过程中,难免会用到#define。在用的过程中大多数都是#define inf 100000000或#define Max 12。可是你难道没有别的想法了吗?
例1:define不仅仅能代表一个数字
在变成的过程中,经常或用到for,为了简化,可以写成#define f(n) for(int i=1;i<=n;++i);当一个字符串的位数在不停的变化的时候,str.size()就会显得十分累赘,所以,可以用#define ss str.size()>来表示。可是define的用处要有很多。
例2:define不仅仅能代表一串字符
2.1:lowbit
相信大家都是到lowbit也世道它有什么用,但是你有没有想过int lowbit()它返回的是int,而不是unsigned或long long,于是,就用上了#define。
用define写也很容易:#define lowbit(x) (x&(-x)),竟然连定义的时候int x或unsigned x都不用加!
当你的朋友按着ctrl+鼠标左键时,他什么也找不着。
2.2:swap
大家对这个肯定了如指掌,但是通过位运算:^也能进行交换:
void swap(int *a,int *b)
{
*a^=*b;
*b^=*a;
*a^=*b;
}
但是写一个函数太麻烦了,于是就用上了鼎鼎有名的define:#define swap(x,y) (x^ =y,y^ =x,x^ =y)你可能会说:这个怎么没有加*呢?这是因为swap函数里的x和y的地址就是调用时的x和y。
2.3:gcd和lcm
inline int gcd(a,b)
{
return (b?gcd(b,a%b):a);
}
inline int lcm(a,b)
{
return a*b/gcd(a,b);
}
但是,#define也可以做#define gcd(a,b) (b?gcd(b,a%b):a)、#define lcm(a,b) (a*b/gcd(a,b)),#define也可以自己调用自己!
max和min
这个大家最为熟悉了吧。直接上代码#define max(x,y) (x>y?x:y)和#define min(x,y) (y>x?x:y)
未完待续 持续更新