标签:
自己封装的FastIO类,效率虽有所损失,不过实用性提高很多。
测试,写10000000个整数(86M):
测试,读10000000个整数(86M):
利用c++的可变参数模板(c++11)和重载可以轻松实现数量不定的混合输入输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
class FastIO { public: FastIO() { pin = in; countin = countout = 0; } int read2mem() { return countin = fread(in, 1, insize, stdin); fclose(stdin); } int write2disk() { return fwrite(out, 1, countout, stdout); fclose(stdout); } int read() { return 0; } template<typename T, typename ...R> int read(T &f, R &...r) { if (get(f) == -1) return -1; c = read(r...); if (c == -1) return -1; return 1 + c; } void write() { put(‘\n‘); } template<typename T, typename ...R> void write(const T x, const R ...r) { put(x); write(r...); } private: const static int insize = (1 << 20) * 200, outsize = (1 << 20) * 100; char in[insize], out[outsize], *pin; int countin, countout, a[20], c, negative; /*** read ***/ inline bool digit(const char ch) { return ch == ‘-‘ || ch >= ‘0‘ && ch <= ‘9‘; } int get(char s[]) { while ((*pin == ‘ ‘ || *pin == ‘\n‘) && pin - in != countin) pin ++; if (pin - in == countin) return -1; while (*pin != ‘ ‘ && *pin != ‘\n‘ && pin - in != countin) *s ++ = *pin ++; *s = 0; return 1; } int get(char &ch) { if (pin - in == countin) return -1; ch = *pin ++; return 1; } int get(int &buf) { while (!digit(*pin) && pin - in != countin) pin ++; if (pin - in == countin) return -1; buf = 0; negative = 0; if (*pin == ‘-‘) { negative = 1; pin ++; } while (digit(*pin)) { buf = buf * 10 + *pin - ‘0‘; pin ++; } if (negative) buf = -buf; return 1; } /*** write ***/ void put(unsigned int x) { c = 0; a[c ++] = x % 10 + ‘0‘; x /= 10; while (x) { a[c ++] = x % 10 + ‘0‘; x /= 10; } while (c) { out[countout ++] = a[-- c]; } } void put(int x) { c = 0; negative = x < 0; if (negative) { x = -x; out[countout ++] = ‘-‘; } a[c ++] = x % 10 + ‘0‘; x /= 10; while (x) { a[c ++] = x % 10 + ‘0‘; x /= 10; } while (c) { out[countout ++] = a[-- c]; } } void put(const char &ch) { out[countout ++] = ch; } void put(char s[]) { while (*s) out[countout ++] = *s ++; } }; |
标签:
原文地址:http://www.cnblogs.com/jklongint/p/4774075.html