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

时间:2018-05-14 10:38:35

标签: c++ loops save stdvector

我开发了一种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;

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

2 个答案:

答案 0 :(得分:2)

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

可能你当前的瓶颈是使用std::endl,它会强制将任何缓冲区刷新到目的地。将其替换为\n并且仅在结束时冲洗一次 - 这应该会给您带来相当大的加速。 E.g。

for(int tstep=0;tstep<maxTstep;++tstep)
{
    <code>
    outFile<<"data"<<'\n';
}

outFile.flush();

答案 1 :(得分:0)

如果“数据”相对较小,则方法#1和&amp; #2的表现非常相似。

如果“data”很大,例如几百字节或更高,那么方法#1会更好,因为它避免了将数据分配和复制到outputVector(除非这是必要的)。