An open API service indexing awesome lists of open source software.

https://github.com/argvchs/fastio

C++ FastIO lib.
https://github.com/argvchs/fastio

c-plus-plus cpp cpp20 fastio

Last synced: about 1 year ago
JSON representation

C++ FastIO lib.

Awesome Lists containing this project

README

          

# FastIO

一个快读快写库,支持基本类型读写,指针地址写入,和 `cin` `cout` 用法类似。

虽然相对于原版函数式 `fread` 快读会有点慢,但还是比 `getchar` `putchar` 要快的。

# 1. 目录解释

```text
fastio.cpp # 测试代码
fastio.h # FastIO 库源代码
fastio.beta.h # FastIO 库源代码,使用 C++20
fastio.in # 读写测试数据
```

# 2. 使用

- `using namespace fastio;`

使用 FastIO。

- `using namespace fastio::symbols;`

使用读写符号,如 `endl`。

- `is >> n;`

读取 `n`。

- `is >> n >> m >> k;`

读取 `n` `m` `k`。

- `c = is.get();` `is.get(c);`

读取一个字符到 `c`。

- `is >> s;`

读取一个字符串 `s`。

- `is.getline(s);`

读取一行到 `s`。

- `is.getline(s, end);`

读取字符到 `s`,一直读到 `end` 停止。

- `is.get(s);`

读取一行到 `s`,但是把换行符保留在流中。

- `is.get(s, end);`

读取字符到 `s`,一直读到 `end` 停止,但是把 `end` 保留在流中。

- `is.ignore();`

忽略一行。

- `is.ignore(end);`

忽略字符到 c 停止。

- `while (is >> n) ;`

一直读取直到末尾。

- `is >> bin;` `is >> oct;` `is >> dec;` `is >> hex;`

按 2、8、10、16 进制读取数。

- `is >> ws;`

忽略前导空格。

- `is.setbase(n);`

按 `base` 进制读取数 $(2 \le base \le 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 \le base \le 36)$。

- `os << setw(n);`

设置下一次写入宽度若小于 `width`,就填补字符(下一次写入重置)。

- `os << setfill(c);`

设置 `setw` 填补的字符,默认为空格。

- `os << left;`

设置 `setw` 填补的字符在左边。

- `os << right;`

设置 `setw` 填补的字符在右边。

- `os << setprecision(n);`

设置浮点数保留位数,默认保留 3 位。

- `os << reset;`

取消前面的所有设置。

- `ifstream ifs(s);`

创建文件读流,文件路径为 `s`,和普通读流用法相同。

- `ofstream ofs(s);`

创建文件写流,文件路径为 `s`,和普通写流用法相同。

# 3. 接口

可以用接口来重载运算符。

**注意要用 `fastio::interface::istream` `fastio::interface::ostream` 来重载。**

以下是重载 `std::tuple` 的示例程序。

```cpp
using namespace fastio;
template
interface::istream &operator>>(interface::istream &is, std::tuple &a) {
std::apply([&](auto &&...args) { ((is >> args), ...); }, a);
return is;
}
template
interface::istream &operator>>(interface::istream &is, std::tuple &&a) {
std::apply([&](auto &&...args) { ((is >> args), ...); }, a);
return is;
}
template
interface::ostream &operator<<(interface::ostream &os, std::tuple const &a) {
std::apply([&](auto &&...args) { ((os << args << ' '), ...); }, a);
return os;
}
```