快到难以想象的快速读模版

没错,比上一个快速读写模版 跳转 还要快,这个模版是利用fread方法实现一次性读完(速度快,缺点也明显,特别耗费内存!!)

​ 具体模版如下:

namespace IO {
    const int MX = 4e7;		 //1e7 占用内存 11000kb
    char buf[MX];
    int c, sz;
    
    void begin() {			//该方法用于main方法开头位置,可一次性读完全部输入
        c = 0;
        sz = fread(buf, 1, MX, stdin);  //一次性全部读入
    }
    
    inline bool read(int &t) {		//用于从buf中读入每个数
        while (c < sz && buf[c] != '-' && (buf[c] < '0' || buf[c] > '9')) c++;
        if (c >= sz) return false;			//若读完整个缓冲块则退出
        bool flag = 0; if(buf[c] == '-') {
        	flag = 1;
            c++;
        }
        for(t = 0; c < sz && '0' <= buf[c] && buf[c] <= '9'; c++) 
        	t = t * 10 + buf[c] - '0';
        if(flag) t = -t;
        return true;
    }
}

​ 具体用法如下:

int a[105];
int main() {
    IO::begin();	//一次性读完全部输入
    int T, n;
    IO::read(T);	//从buf中读入到T
    while (T--) {
    	IO::read(n);    //从buf中读入到n
    	for (int i = 0; i < n; i++) {
            IO::read(a[i]);	//从buf中读入到a[i]
    	}
    }
}

​ 注意!!!只有当运行ctrl + z时才代表IO::begin()结束(在windows下,LINUX下为ctrl + d),程序正式执行~

​ 就酱紫~

猜你喜欢

转载自blog.csdn.net/Ivan_zcy/article/details/83243135