【模板】快速读入/读入优化

版权声明:文章没有质量,谢绝转载 https://blog.csdn.net/qq_40515553/article/details/80732719

蒟蒻输入成长史

放个板子在这

测试了几个输入方法,发现几种输入方法的速度大致为:

cin<<scanf<cin()<read<<fread

  • 入门教的是用cin
cin>>x
  • noip普及组时才知道用scanf
scanf("%d",&x);
  • 有人会接触到cin的关闭流同步,不过这玩意儿好像在OI赛制中不能用?而且关闭流同步后就不能读入string类型了
ios::sync_with_stdio(false);  
cin>>x;
  • 再后来noip提高组了,听dalao们说有种东西叫做读入优化read
template <typename _Tp> inline _Tp read(_Tp&x){
    char c11=getchar(),ob=0;x=0;
    while(c11^'-'&&!isdigit(c11))c11=getchar();if(c11=='-')c11=getchar(),ob=1;
    while(isdigit(c11))x=x*10+c11-'0',c11=getchar();if(ob)x=-x;return x;
}

int main(){b=read(a);}
  • 现在卡常成瘾了,学习了fread
struct ios {
    inline char read(){
        static const int IN_LEN=1<<18|1;
        static char buf[IN_LEN],*s,*t;
        return (s==t)&&(t=(s=buf)+fread(buf,1,IN_LEN,stdin)),s==t?-1:*s++;
    }

    template <typename _Tp> inline ios & operator >> (_Tp&x){
        static char c11,boo;
        for(c11=read(),boo=0;!isdigit(c11);c11=read()){
            if(c11==-1)return *this;
            boo|=c11=='-';
        }
        for(x=0;isdigit(c11);c11=read())x=x*10+(c11^'0');
        boo&&(x=-x);
        return *this;
    }
} io;

int main(){io>>a>>b;}
阅读更多

没有更多推荐了,返回首页