在标准C ++中读取文件最快的方法是什么?

问题描述

如果我有一个包含数十亿个字符的文件,那么在不使用外部库的情况下(主要是为竞争性编程而寻求)的最快读取方法是什么?

我找到了一篇展示该示例的文章,并说使用InParser类比使用ifstream更快(这是链接,但是它不是英文的,所以我没有认为对您有帮助:https://infogenius.ro/parsare-cpp/。它说,当您直接使用ifstream进行读取时,幕后发生了一些事情,这会使事情变慢,因此最好将整个文件作为字符串读取,然后转换为其他数据类型( int (在此示例中))

class InParser {
  private:
    vector<char> str;
    int ptr;
    ifstream fin;

    char getChar() {
        if (ptr == (int) str.size()) {
            fin.read(str.data(),str.size());
            ptr = 0;
        }
        return str[ptr++];
    }

    template<class T>
    T getInt() {
        char chr = getChar();
        while (!isdigit(chr) && chr != '-')
            chr = getChar();
        int sgn = +1;
        if (chr == '-') {
            sgn = -1;
            chr = getChar();
        }
        T num = 0;
        while (isdigit(chr)) {
            num = num * 10 + chr - '0';
            chr = getChar();
        }
        return sgn * num;
    }

  public:
    InParser(const char* name) : str(1e5),ptr(str.size()),fin(name) { }
    ~InParser() { fin.close(); }

    template<class T>
    friend InParser& operator>>(InParser& in,T& num) {
        num = in.getInt<T>();
        return in;
    }
};

int main() {
    InParser fin("file.in");
    int a; int64_t b; fin >> a >> b;
    cout << a + b << '\n';
    return 0;
}

我的问题是:

  1. 这种方法比仅使用std::ifstream fin("file.in");更快吗?

  2. 是否有更好的方法可以执行此操作而不使用外部库?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)