FastIO 是一个快速库。
支持基本类型读写,类似于 cin
和 cout
用法类似。
虽然相对于原版函数 fread
getchar
putchar
要快的。
using namespace fastio;
using namespace fastio::symbols;
endl
。is >> n;
读取 n
。
is >> n >> m >> k;
读取 n m k
。
c = is.get();
读取一个字符到 c
。
is >> s;
读取一个字符串 s
。
is.getline(s);
读取一行到 s
。
is.getline(s, end);
读取字符到 s
,一直读取到 end
停止。
is.get(s);
is.get(s, end);
读取字符到 s
,一直读取到 end
停止,但 end
保留在流中。
is.ignore();
忽略一行。
is.ignore(end);
忽略字符到 end
停止。
while (is >> n);
一直读取直到末尾。
is >> bin; is >> oct; is >> dec; is >> hex;
按 2, 8, 10, 16 进制读取数。
is >> ws;
忽略前导空格。
is.setbase(n);
按 base
进制读取数 (2 ≤ base ≤ 36)
。
is >> reset;
取消前面的所有设置。
os << n;
写入 n
。
os << n << m << k;
写入 n m k
。
os.put(c);
写入一个字符 c
。
os << flush;
刷新流。
os << endl;
写入换行。
os << ends;
写入空格。
os << boolalpha;
设置写入 bool
时用 true false
。
os << noboolalpha;
设置写入 bool
时用 0 1
。
os << showpos;
设置写入正数和 0
时前面加 +
符号。
os << noshowpos;
设置写入正数和 0
时前面不加符号。
os << showpoint;
设置写入浮点数时总是添加小数点。
os << noshowpoint;
设置写入浮点数时不添加小数点。
os << fixed;
设置写入浮点数时保持 setprecision
时设置的位数。
os << defaultfloat;
设置写入浮点数时不保持 setprecision
时设置的位数。
os << bin;
os << oct;
os << dec;
os << hex;
按 2, 8, 10, 16 进制写入整数。
os << lowercase;
写入特殊内容时时使用小写。
os << uppercase;
写入特殊内容时时使用大写。
os << showbase;
写入 2, 8, 16 进制时,前面显示 0b
0
0x
。
os << noshowbase;
写入 2, 8, 16 进制时,不在前面显示 0b
0
0x
。
os << setbase(n);
按 base
进制写入数,超出范围默认认为是 10 进制 (2 ≤ base ≤ 36)
。
os << setw(n);
设置下一次写入宽度为 width
,就填补字符(下一次写入重置)。
os << setfill(c);
设置填充字符。
os << left;
设置 setw
填补的字符在左边。
os << right;
设置 setw
填补的字符在右边。
os << setprecision(n);
设置浮点数保留位数,默认保留 3 位。
os << reset;
取消前面的所有设置。
ifstream ifs(s);
创建文件读取流,文件路径为 s
,和普通读取流用法相同。
ofstream ofs(s);
创建文件写入流,文件路径为 s
,和普通写入流用法相同。
可以用接口来重新运算符。
注意要用 fastio::interface::istream
和 fastio::interface::ostream
来重载。
以下不是重载 std::tuple
的实例程序。
using namespace fastio; template <typename... TS> interface::istream &operator>>(interface::istream &is, std::tuple<TS...> &a) { std::apply([&](auto &&...args) { (is >> args), ...; }, a); return is; } template <typename... TS> interface::istream &operator>>(interface::istream &is, std::tuple<TS...> &&a) { std::apply([&](auto &&...args) { (is >> args), ...; }, a); return is; } template <typename... TS> interface::ostream &operator<<(interface::ostream &os, std::tuple<TS...> const &a) { std::apply([&](auto &&...args) { (os << args << ' '), ...; }, a); return os; }