1. 程式人生 > >快到難以想象的快速讀模版

快到難以想象的快速讀模版

沒錯,比上一個快速讀寫模版 跳轉 還要快,這個模版是利用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),程式正式執行~

​ 就醬紫~