zoukankan      html  css  js  c++  java
  • 快速读入输出模板

    fread快速读入+fwrite快速输出大法好。

    实测比普通读入优化快一倍,输出不知道高到哪里去了。

    /*
     * 快速读入输出模板     Au: Hatsune Miku
     * 用法:
     *       1. 在打开文件后立即调用init()函数初始化缓冲区。
     *       2. 读入时请使用 read()读入,可以读入字符串(仅限字母)与数字。
     *       3. 输出时请使用 print()输出到缓冲区,可以输出字符串、数字与字符。
     *       4. 在关闭文件前使用 flush()刷新缓存区(真正输出到文件中)。
     * 函数返回值:
     *            1. 所有输入操作均有返回值,返回真表示读入成功,变量已被修改,返回假表示读不到指定类型的数据,变量被清零;
     *            2. 所有输出操作均无返回值,缓冲区自动刷新。
     *            3. 初始化函数无返回值,如果超出缓冲区会RE。
     * 玩得愉快!
    */
    #include<cstdio>
    #include<cctype>
    #include<cstdlib>
    #include<assert.h>
    using namespace std;
    
    const int InputBufferSize = 67108864;//输入缓冲区大小
    const int OutputBufferSize = 67108864;//输出缓冲区大小 
    
    namespace input
    {
        char buffer[InputBufferSize],*s,*eof;
        inline void init()
        {
            assert(stdin!=NULL);
            s=buffer;
            eof=s+fread(buffer,1,InputBufferSize,stdin);
        }
        inline bool read(int &x)
        {
            x=0;
            int flag=1;
            while(!isdigit(*s)&&*s!='-')s++;
            if(eof<=s)return false;
            if(*s=='-')flag=-1,s++;
            while(isdigit(*s))x=x*10+*s++-'0';
            x*=flag;
            return true;
        }
        inline bool read(char* str)
        {
            *str=0;
            while(isspace(*s))s++;
            if(eof<s)return false;
            while(!isspace(*s))*str=0,*str=*s,str++,s++;
            *str=0;
            return true;
        }
    }
    
    namespace output
    {
        char buffer[OutputBufferSize];
        char *s=buffer;
        inline void flush()
        {
            assert(stdout!=NULL);
            fwrite(buffer,1,s-buffer,stdout);
            s=buffer;
            fflush(stdout);
        }
        inline void print(const char ch)
        {
            if(s-buffer>OutputBufferSize-2)flush();
            *s++=ch;
        }
        inline void print(char* str)
        {
            while(*str!=0)print(char(*str++));
        }
        inline void print(int x)
        {
            char buf[25]= {0},*p=buf;
            if(x<0)print('-'),x=-x;
            if(x==0)print('0');
            while(x)*(++p)=x%10,x/=10;
            while(p!=buf)print(char(*(p--)+'0'));
        }
    }
    
    using namespace input;
    using namespace output;
    
    int num;
    
    int main()
    {
        freopen("data.in","rb",stdin);//请根据题目修改文件名
        freopen("data2.out","wb",stdout);//请根据题目修改文件名
        init();
        /*
           ...
           此处应有代码。
           ...
           下面的代码示例读入一个数列,然后输出这个数列。
           ``````````````````````````````````````
           ` int a;                             `
           ` while(read(a))print(a),print(' '); `
           ``````````````````````````````````````
        */
        while(read(num))print(num),print(' ');
        flush();
        return 0;
    }
    

      

  • 相关阅读:
    iOS之NSString类型为什么要用copy修饰
    【转】高频使用的git清单
    【转】把Git Repository建到U盘上去
    python程序的打开运行方式
    python运算符的优先级顺序
    iOS之正则表达式(一)
    iOS之input file调用相册控制器消失跳转到登陆页
    监督学习与无监督学习
    常用的文件打开模式
    编码格式
  • 原文地址:https://www.cnblogs.com/TheRoadToAu/p/8639902.html
Copyright © 2011-2022 走看看