玄学卡常技巧总结

近期总是被cin和cout搞TLE,一时兴起找了些卡常技巧~~
文末有参考说明~

一、IO优化

快读:

inline int Read()
{
    int x=0,f=1;char c=getchar();
    while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();}
    return x*f;
}

(一般不用输出优化)

inline void out(int x){
    if(x>=10){
        out(x/10);
    }
    putchar(x%10+'0');
}

二、inline

在声明函数之前写上inline修饰符,可以加快一下函数调用,但只能用于一些操作简单的函数。涉及递归,大号的循环等很复杂的函数,编译器会自动忽略inline。

三、register

在定义变量前写上register修饰符,用于把变量放到CPU寄存器中,适用于一些使用频繁的变量,如:

register int n,m;

寄存器空间有限,如果放得变量太多,多余变量就会被放到一般内存中。

四、前置++

++i代替i++

  1. 后置++需要保存临时变量以返回之前的值,在 STL 中非常慢。
  2. 事实上,int的后置++在实测中也比前置++慢0.5倍左右

五、bool优化

bool会比int慢,貌似int最快。

六、if () else语句比 () ? () : () 语句要慢,逗号运算符比分号运算符要快。

最后感谢该博主的博客~~

你可能感兴趣的:(acm)