LOADING

加载过慢请开启缓存 浏览器默认开启

C++ FastIO

FastIO 是一个快读快写库。

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

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

1. 目录解释

fastio.cpp          # 测试代码
fastio.hpp          # FastIO 库源代码
fastio.beta.hpp     # 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();

    读取一个字符到 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 的示例程序。

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;
}