C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?

Posted

技术标签:

【中文标题】C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?【英文标题】:C++ Write to file line by line in loop or add to array and write to file after loop? 【发布时间】:2018-05-14 10:38:35 【问题描述】:

我开发了一个 CFD 仿真模型,该模型主要在一个循环中运行。

有一些数据需要在每个时间步输出,例如线性代数求解器中的收敛和迭代。

执行此操作的最佳做​​法是什么?目前我有:

for(int tstep=0;tstep<maxTstep;++tstep)

    <code>
    outFile<<"data"<<endl;

在每个循环结束时将一行写入多个文件。这样做是否更好:

for(int tstep=0;tstep<maxTstep;++tstep)

    <code>
    outputVector.push_back("data");

for(int i=0;i<outputVector.size();++i) outFile<<outputVector[i]<<endl;

将输出数据添加到向量中,然后一次性写入文件?

【问题讨论】:

【参考方案1】:

唯一正确的答案是将这两种方法与您的生产构建设置进行衡量和比较。直观地说,我不明白为什么 vector 方法会更快 - 我希望它会更慢。

您当前的瓶颈可能是使用std::endl,它会强制将任何缓冲区刷新到其目的地。用\n 替换它,最后只刷新一次——这应该会给你一个相当大的加速。例如

for(int tstep=0;tstep<maxTstep;++tstep)

    <code>
    outFile<<"data"<<'\n';


outFile.flush();

【讨论】:

【参考方案2】:

如果“数据”相对较小,那么方法 #1 和 #2 的性能将非常相似。

如果“数据”很大,例如,几百字节或以上,那么方法 #1 会更可取,因为它避免了将数据分配和复制到 outputVector 中(除非无论如何都需要这样做)。

【讨论】:

以上是关于C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?的主要内容,如果未能解决你的问题,请参考以下文章

添加另一个循环后执行停止(C,Project Hangman)

如何将它们添加到字典中,并在python中每5个循环后使活动变量成为结尾?

如何在C中逐字节或分块写入()到文件

C++ 如何将一个文件里的数据写入到另一个文件里?

Excel VBA - 循环未正确添加数据

c#如何将结构的引用添加到数组或列表?