快速输入输出

由于c++自带的scanf有时候会被卡,自己写一下输入输出会让程序快很多,下面我用的是fread加速读入.

fread的速度是scanf,cin关同步指针的几十倍,是普通read的2倍.让程序跑得更快.

听说还有一种更快的方法叫mmap,可本蒟蒻不会,如果感兴趣可以自行百度.

为了看的时候方便,我把这些封装在一个namespace里面,要用的时候调用就可以了.

下面是代码:

1 namespace zdy{
2 #define ll int
3 #define pob (fwrite(fob::b,sizeof(char),fob::f-fob::b,stdout),fob::f=fob::b,0)
4 #define pc(x) (*(fob::f++)=(x),(fob::f==fob::g)?pob:0)
5 #define gc ((*fib::f)?(*(fib ::f++)):(fgets(fib::b,sizeof(fib::b),stdin)?(fib::f=fib::b,*(fib::f++)):-1))
6 namespace fib{char b[300000]= {},*f=b;}inline void in(ll &x){x=0;char c;bool f=0;while((c=gc)>'9'||c<'0')if(c=='-')f=!f;x=c-48;while((c=gc)<='9'&&c>='0')x=x*10+c-48;if(f)x=-x;}namespace fob{char b[300000]= {},*f=b,*g=b+300000-2;}struct foce{~foce(){pob;fflush(stdout);}} _foce;namespace ib{char b[100];}inline void out(ll x){if(x==0){pc(48);return;}if(x<0){pc('-');x=-x;}char *s=ib::b;while(x) *(++s)=x%10,x/=10;while(s!=ib::b) pc((*(s--))+48);}inline void outn(ll x){out(x);pc('\n');}
7 }using namespace zdy;

只要把这段代码粘贴到代码的主程序的上面,就可以使用in(x)输入x,out(x)输出x,outn(x)输出x并换行

 ll指的是要读入的整数的类型,可以是short,int,long long,_int64/_int128等类型

猜你喜欢

转载自www.cnblogs.com/mimiorz/p/9160670.html
今日推荐