超级快读快写
作者:
tian720
,
2024-11-09 16:01:08
,
所有人可见
,
阅读 5
适用于可负可正整数的超级快读快写
struct IO{
#define MAXSIZE (1<<20)
#define isdigit(x) (x>='0'&&x<='9')
char buf[MAXSIZE],*p1,*p2;
char pbuf[MAXSIZE],*pp;
#if DEBUG
#else
IO():p1(buf),p2(buf),pp(pbuf) {}
~IO() {fwrite(pbuf,1,pp-pbuf,stdout);}
#endif
char gc(){
#if DEBUG
return getchar();
#endif
if(p1==p2) p2=(p1=buf)+fread(buf,1,MAXSIZE,stdin);
return p1==p2?' ':*p1++;
}
bool blank(char ch){
return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';
}
template <class T>
void read(T &x){
double tmp=1;
bool sign=false;
x=0;
char ch=gc();
for(;!isdigit(ch);ch=gc())
if(ch=='-') sign=1;
for(;isdigit(ch);ch=gc()) x=x*10+(ch-'0');
if(ch=='.')
for(ch=gc();isdigit(ch);ch=gc())
tmp/=10.0,x+=tmp*(ch-'0');
if(sign) x=-x;
}
void read(char *s){
char ch=gc();
for(;blank(ch);ch=gc());
for(;!blank(ch);ch=gc()) *s++=ch;
*s=0;
}
void read(char &c) {for(c=gc();blank(c);c=gc());}
void push(const char &c){
#if DEBUG
putchar(c);
#else
if(pp-pbuf==MAXSIZE) fwrite(pbuf,1,MAXSIZE,stdout),pp=pbuf;
*pp++=c;
#endif
}
template <class T>
void write(T x){
if(x<0) x=-x,push('-');
static T sta[35];
T top=0;
do{
sta[top++]=x%10,x/=10;
}while(x);
while(top) push(sta[--top]+'0');
}
template <class T>
void write(T x,char lastChar){
write(x),push(lastChar);
}
}io;
调用
int x;
io.read(x);
io.write(x);