我必须在C ++中为文本文件编写大约5到6个相同大小的大型数组。我只使用一个“for循环”将所有数组写入文本文件。以下是我正在使用的代码。
ofstream kx_ecl("COARSE_PERMX.GRDECL");
ofstream ky_ecl("COARSE_PERMY.GRDECL");
ofstream kz_ecl("COARSE_PERMZ.GRDECL");
ofstream ntg_c("COARSE_NTG.GRDECL");
ofstream phi_c("COARSE_PORO.GRDECL");
ofstream multbv("MULTBRV.GRDECL");
kx_ecl<<"PERMX"<<endl;
ky_ecl<<"PERMY"<<endl;
kz_ecl<<"PERMZ"<<endl;
ntg_c<<"NTG"<<endl;
phi_c<<"PORO"<<endl;
multbv<<"MULTBRV"<<endl;
for (i=0;i<N;i++) {
kx_ecl<<new_KX[i]<<endl;
ky_ecl<<new_KY[i]<<endl;
kz_ecl<<new_KZ[i]<<endl;
ntg_c<<new_NTG[i]<<endl;
phi_c<<new_por[i]<<endl;
multbv<<MULTBRV[i]<<endl;
}
kx_ecl<<"/";
ky_ecl<<"/";
kz_ecl<<"/";
ntg_c<<"/";
phi_c<<"/";
multbv<<"/";
kx_ecl.close();
ky_ecl.close();
kz_ecl.close();
ntg_c.close();
phi_c.close();
multbv.close();
我的问题是,如果我逐个单独输出它们会更快,在这种情况下它会有很多for循环或保持不变。另外,有没有办法在不使用for循环的情况下将数组写入文件?我问,因为与我的代码中的实际计算相比,文件的输出花费了大量时间。
答案 0 :(得分:3)
你是否意识到std :: endl正在不断刷新你的游戏?你可以推出'\ n'字符而只是在每个流的末尾刷一次。
I / O可能仍然是你花费的时间中最重要的一部分,但是你正在反对缓冲,并且在这个例子中似乎不至少从中获得任何东西。一次运行一个数组/文件可能会因为更好的内存局部性而无法获得更快的性能(除非您使用如此多的内存将页面交换到磁盘),但差异可能会在巨大的成本中完全丢失。文件写作。