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

标签 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;

输出数据被添加到 vector 中,然后一次性写入文件?

最佳答案

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

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

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

outFile.flush();

关于C++在循环中逐行写入文件或添加到数组并在循环后写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50328313/

相关文章:

c++ - 使用 STD 和 C++ 从具有常数时间的集合中删除一个值

c++ - 如何在CUDA中为多个Thrust对象成员函数调用内核函数?

java - 在循环中连接 Java 数组

r tidycensus 下载所有 block 组

android - SharedPreferences 与私有(private)文件

c++ - 为什么 Visual Studio 2010 会创建预编译头文件,即使我不要求它?

c++ - 从另一台计算机运行 opencv 可执行文件

arrays - 从迭代器内的对象中删除元素的最佳方法是什么?

Excel,运行后保存并关闭

android - 将 arraylist 保存到 androids 内存的最佳方法