您的位置:首页 > 博客中心 > 互联网 >

【模板】快读快输lite版

时间:2022-05-11 08:51

what is it?

我把快读快写装进了一个模板中。

本模板使用fread

之所以是lite版,是因为它只集成了整型的输入输出与字符的输出优化。

虽经过博主大量测试,但仍可能存在bug,可以私信向博主反馈以及时修改。

后期会出一个所有类型输入输出优化的模板。

How to use it?

读入一个字符变量 c ,使用 io>>cc=io.get() ,会读取换行、空格等空字符;

读入一个整型变量 a ,使用 io>>a

读入两个整型变量 ab ,使用 io>>a>>b ,以此类推。

输出一个字符 c ,使用 io<io.put(c)

输出一个整型变量 a ,使用 io<

输出两个整型变量 ab (不分隔),使用 io< ,以此类推。

需要头文件: #include

class IO {
	#define MAXSIZE 1<<17
    #define isdigit(x) (x>=‘0‘&&x<=‘9‘)
    public:
    	inline IO() {sta_int[0]=‘\0‘,s1=s3=ibuf,s2=obuf;}
        inline ~IO() {fwrite(obuf,1,s2-obuf,stdout);}
        inline char get() 
			{return (s1==s3&&(s3=(s1=ibuf)+fread(ibuf,1,MAXSIZE,stdin),s1==s3))?0:*s1++;}
		inline void put(const char c) 
			{(s2-obuf==MAXSIZE)&&(fwrite(obuf,1,s2-obuf,stdout),s2=obuf),*s2++=c;}
		template
        inline IO &read(T &x) {
            register char c=get();
            while(isspace(c)&&(c=get()));
            register bool f=(c==‘-‘);
            x=0,isdigit(c)||(c=get());
            while(isdigit(c)) 
				x=(x<<1)+(x<<3)+(c^‘0‘),c=get();
            return f&&(x=~x+1),*this;
        }
        template
		inline IO &write(T x) {
            register char *p=sta_int;
            (x<0)&&(put(‘-‘),x=~x+1);
            do *++p=(x%10)|‘0‘,x/=10; while(x);
            while(*p)   put(*p--);
            return *this;
		}
        template inline IO &operator >> (T &x) {return read(x);}
        template inline IO &operator << (const T x) {return write(x);}
    protected:
        char ibuf[MAXSIZE],obuf[MAXSIZE],sta_int[256],*s1,*s2,*s3;
    #undef MAXSIZE
    #undef isdigit
}io;

本类排行

今日推荐

热门手游