C ++高性能文件读写(C ++ 14)

奴役007

我正在编写一个C ++ 14程序,用于从文件中加载文本字符串,对其进行一些计算,然后写回另一个文件。我使用的是Linux,文件相对较大(O(10 ^ 6行))。我典型的解决方法是使用旧的Cgetlinesscanf实用程序读取和解析输入,并fprintf(FILE*, …)写入输出文件。这行得通,但我想知道是否有更好的方法可以实现高性能的目标,并且我所使用的现代C ++标准通常推荐使用这种方法。我听说那iostream很慢。如果是这样,我想知道是否有更推荐的方法。

更新:为了澄清用例:对于输入文件的每一行,我将进行一些文本操作(数据清除等)。每条线都是独立的。因此,加载整个输入文件(或至少大块文件),并逐行处理它,然后编写它,似乎是最有意义的。理想的抽象方法是将迭代器添加到读缓冲区,每行都是一个条目。有没有推荐的方法可以用std :: ifstream做到这一点?

大卫

如果有内存,最快的选择是将整个文件读入1次读取的缓冲区中,在内存中处理该缓冲区,然后用1次写入将其全部写出。

阅读全部内容:

std::string buffer;

std::ifstream f("file.txt");
f.seekg(0, std::ios::end);
buffer.resize(f.tellg());
f.seekg(0);
f.read(buffer.data(), buffer.size());

然后处理

然后全部编写:

std::ofstream f("file.txt");
f.write(buffer.data(), buffer.size());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章