-
-
Save CodeBoy2006/6f600565908629863625ec252329b7db to your computer and use it in GitHub Desktop.
OI专用头文件,包含自带调试模式的IO类,值得拥有
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <algorithm> | |
| #include <bitset> | |
| #include <complex> | |
| #include <deque> | |
| #include <exception> | |
| #include <fstream> | |
| #include <functional> | |
| #include <iomanip> | |
| #include <ios> | |
| #include <iosfwd> | |
| #include <iostream> | |
| #include <istream> | |
| #include <iterator> | |
| #include <limits> | |
| #include <list> | |
| #include <locale> | |
| #include <map> | |
| #include <memory> | |
| #include <new> | |
| #include <numeric> | |
| #include <ostream> | |
| #include <queue> | |
| #include <set> | |
| #include <sstream> | |
| #include <stack> | |
| #include <stdexcept> | |
| #include <streambuf> | |
| #include <string> | |
| #include <typeinfo> | |
| #include <utility> | |
| #include <valarray> | |
| #include <vector> | |
| #include <array> | |
| #include <atomic> | |
| #include <chrono> | |
| #include <condition_variable> | |
| #include <forward_list> | |
| #include <future> | |
| #include <initializer_list> | |
| #include <mutex> | |
| #include <random> | |
| #include <ratio> | |
| #include <regex> | |
| #include <scoped_allocator> | |
| #include <system_error> | |
| #include <thread> | |
| #include <tuple> | |
| #include <typeindex> | |
| #include <type_traits> | |
| #include <unordered_map> | |
| #include <unordered_set> | |
| //END OF IMPORT | |
| // #define DEBUG 1 // 调试开关 | |
| struct IO { | |
| #define MAXSIZE (1 << 20) | |
| #define isdigit(x) (x >= '0' && x <= '9') | |
| char buf[MAXSIZE], *p1, *p2; | |
| char pbuf[MAXSIZE], *pp; | |
| #if DEBUG | |
| #else | |
| IO() : p1(buf), p2(buf), pp(pbuf) {} | |
| ~IO() { fwrite(pbuf, 1, pp - pbuf, stdout); } | |
| #endif | |
| inline char gc() { | |
| #if DEBUG // 调试,可显示字符 | |
| return getchar(); | |
| #endif | |
| if (p1 == p2) p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin); | |
| return p1 == p2 ? ' ' : *p1++; | |
| } | |
| inline bool blank(char ch) { | |
| return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t'; | |
| } | |
| template <class T> | |
| inline void read(T &x) { | |
| register double tmp = 1; | |
| register bool sign = 0; | |
| x = 0; | |
| register char ch = gc(); | |
| for (; !isdigit(ch); ch = gc()) | |
| if (ch == '-') sign = 1; | |
| for (; isdigit(ch); ch = gc()) x = x * 10 + (ch - '0'); | |
| if (ch == '.') | |
| for (ch = gc(); isdigit(ch); ch = gc()) | |
| tmp /= 10.0, x += tmp * (ch - '0'); | |
| if (sign) x = -x; | |
| } | |
| inline void read(char *s) { | |
| register char ch = gc(); | |
| for (; blank(ch); ch = gc()) | |
| ; | |
| for (; !blank(ch); ch = gc()) *s++ = ch; | |
| *s = 0; | |
| } | |
| inline void read(char &c) { | |
| for (c = gc(); blank(c); c = gc()) | |
| ; | |
| } | |
| inline void push(const char &c) { | |
| #if DEBUG // 调试,可显示字符 | |
| putchar(c); | |
| #else | |
| if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf; | |
| *pp++ = c; | |
| #endif | |
| } | |
| template <class T> | |
| inline void write(T x) { | |
| if (x < 0) x = -x, push('-'); // 负数输出 | |
| static T sta[35]; | |
| T top = 0; | |
| do { | |
| sta[top++] = x % 10, x /= 10; | |
| } while (x); | |
| while (top) push(sta[--top] + '0'); | |
| } | |
| template <class T> | |
| inline void write(T x, char lastChar) { | |
| write(x), push(lastChar); | |
| } | |
| } io; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment