zoukankan      html  css  js  c++  java
  • 【C++】读入优化&输出优化

    写作原因

    写作原因?水博客。
    很简单。因为作者NOIP学校考试愉快的写崩了读优,写这篇博客以示警惕。

    读入优化

    读入优化?这是一个神奇的东西。为什么说它神奇呢? 请看对比图:

    对比图

    cin.PNGcin_time.PNG
    tie.PNGtie_time.PNG
    scanf.PNGscanf_time.PNG
    read.PNGread_time.PNG
    fread.PNGfread_time.PNG
    (注:最下面一个是用了fread的读入优化)

    附:test_io.in是一个从(1)~(10^7)的每一个数构成的输入文件。

    代码

    #define ONLINE_JUDGE
    #ifdef ONLINE_JUDGE
    char buf[1 << 21], *p1 = buf, *p2 = buf;
    inline int getc() { return p1 == p2 && (++p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++; }
    #define getchar getc
    #endif
    template <typename T>
    inline T read() {
        T a = 0; char c = getchar(), f = 1;
        for(; c < '0' || c > '9'; c = getchar())
            if(c == '-') f = -f;
            else if(c == -1) return -1;
        for(; c >= '0' && c <= '9'; c = getchar()) a = (a << 1) + (a << 3) + (c ^ 48);
        return a * f;
    }
    

    首先,先来解读read的部分。有关template的部分请查阅这篇博客
    原理:getchar的速度比scanf快。
    所以,我们可以按照读入字符串的形式来模仿读入一个数。
    完了…………
    好再来getc的部分(没错就是看,而不是理解)——没什么好理解的,就是背模板
    但是用了fread,就只能文件输入输出,所以上面的#define ONLINE_JUDGE就是拿来交在(OJ)上时用的,一般用小黑板测试时是注释掉的。
    那一句#define getchar getc就是把后面的所有getchar当做getc来处理。
    其它操作不会的就度娘吧……
    天哪读入优化竟然都有我自己造的板题……(其实不用fread也能过……)
    另外,这个代码当然不能用read<double>这种操作,因为double是不支持位运算的。(话说位运算怎么被我旷了)Although你不用位运算也不能用double,因为在代码中没有涉及小数和小数点

    另外说一句,洛谷上测竟然比我上面的自测时间短?!砸电脑。
    而且——另外一个大佬那Copy来的表

    有锤子吗?借一个。

    输出优化

    因为作者没有写崩输出优化,所以输出优化不是重点。
    既然不是重点,那就直接给代码吧!
    背代码就好了嘛。

    template <typename T>
    inline void write(T x) {
        if(x < 0) x = (~x) + 1, putchar('-');
        if(x / 10) write(x / 10);
        putchar(x % 10 | 48);
    }
    

    懒得再去造题了。
    话说fwrite到底怎么用至今没搞清楚

    没参考过的资料:浅谈C++ IO优化——读优输优方法集锦洛谷日报

  • 相关阅读:
    Blob对象转File对象
    TCP的三次握手 与 四次挥手
    HTTP协议 与 TCP协议 的区别
    tcp四次挥手
    tcp协议
    tcp的三次握手
    关于HTTP协议 && TCP协议的一些理解
    Javascript数组中常用的排序法 ——冒泡排序法和选择排序法以及快速排序法
    如何用Bat批处理自制自解压文件
    [SQL]查询所有数据库、表名、表字段总结
  • 原文地址:https://www.cnblogs.com/PI-UKE/p/13566831.html
Copyright © 2011-2022 走看看