我正在编写一个 C++14 程序来从文件加载文本字符串,对它们进行一些计算,然后写回另一个文件。我使用的是 Linux,文件比较大(O(10^6 行))。我的典型方法是使用旧的 C getline
和 sscanf
实用程序来读取和解析输入,并 fprintf(FILE*, …)
来写入输出文件。这行得通,但我想知道是否有更好的方法来实现高性能目标,并且通常推荐使用我正在使用的现代 C++ 标准的方法。我听说 iostream
很慢;如果这是真的,我想知道是否有更推荐的方法。
更新:澄清一下用例:对于输入文件的每一行,我将进行一些文本操作(数据清理等)。每条线都是独立的。因此,加载整个输入文件(或者,至少是其中的大块),并逐行处理它,然后编写它,似乎是最有意义的。对此的理想抽象是获取读入缓冲区的迭代器,每一行都是一个条目。有没有推荐的使用 std::ifstream 的方法?
原文由 Kulluk007 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您有足够的内存,最快的选择是通过 1 次读取将整个文件读入缓冲区,在内存中处理缓冲区,然后通过 1 次写入再次将其全部写出。
全部阅读:
然后处理它
然后全部写出来: