我正在编写一个C++ 14程序来从文件中加载文本字符串,对它们进行一些计算,然后写回另一个文件.我正在使用Linux,文件相对较大(O(10 ^ 6行)).我的典型方法是使用旧的C getline和sscanf实用程序来读取和解析输入,以及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());
Run Code Online (Sandbox Code Playgroud)
然后处理它
然后全部写下来:
std::ofstream f("file.txt");
f.write(buffer.data(), buffer.size());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6573 次 |
| 最近记录: |