码迷,mamicode.com
首页 > 其他好文 > 详细

【模板】快读快输lite版

时间:2021-02-25 12:07:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:return   输出   lin   大量   bool   ++   his   turn   字符变量   

what is it?

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

本模板使用fread

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

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

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

How to use it?

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

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

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

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

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

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

需要头文件: #include <cstdio>

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<class T>
        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<class T>
		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<class T> inline IO &operator >> (T &x) {return read(x);}
        template<class T> 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;

【模板】快读快输lite版

标签:return   输出   lin   大量   bool   ++   his   turn   字符变量   

原文地址:https://www.cnblogs.com/wshcl/p/fast_io_lite.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!