Background
C++标准库<iostream>
中的cin, cout
相比<cstdio>
中的scanf, printf
要方便许多,但速度也较为缓慢。在输入输出的数据类型不是很特殊时,可以使用以下代码来代替cin, cout
(要包含<cctype>, <cstdio>
,不要包含<iostream>
)。
Code
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
| class InputStream { private: static int const BUFFER_SIZE = 10000000; char *buffer;
public: InputStream() { buffer = new char[BUFFER_SIZE](); fread(buffer, sizeof(char), BUFFER_SIZE, stdin); } InputStream &operator>>(int &n) { for (; *buffer < '0' || *buffer > '9'; ++buffer) ; for (n = 0; *buffer >= '0' && *buffer <= '9'; (n *= 10) += *(buffer++) - '0') ; return *this; } InputStream &operator>>(char &c) { for (; !isprint(*buffer) || *buffer == ' '; ++buffer) ; c = *(buffer++); return *this; } InputStream &operator>>(char *s) { char *t = s; for (; !isprint(*buffer) || *buffer == ' '; ++buffer) ; for (; isprint(*buffer) && *buffer != ' '; *(t++) = *(buffer++)) ; *t = '\0'; return *this; } } cin;
class OutputStream { private: static int const BUFFER_SIZE = 10000000; char *buffer, *cur;
public: OutputStream() { buffer = cur = new char[BUFFER_SIZE](); } ~OutputStream() { fwrite(buffer, sizeof(char), cur - buffer, stdout); } OutputStream &operator<<(int const &n) { for (sprintf(cur, "%d", n); *cur; ++cur) ; return *this; } OutputStream &operator<<(char const &c) { *(cur++) = c; return *this; } OutputStream &operator<<(char *s) { for (char *t = s; *t; *(cur++) = *(t++)) ; return *this; } } cout;
static char const endl = '\n';
|