2013-12-13 78 views
1

我必須在C++中將相同大小的5到6個大數組寫入文本文件。我只用一個「for循環」將所有數組寫入文本文件。以下是我正在使用的代碼。將數組寫入到C++中的文本文件中

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

我認爲你會看到的唯一區別是每個文件都應該按順序生成而不是一次全部生成,所以是的,一些文件應儘快寫入,但總時間應保持不變。 –

+0

在這種情況下詢問「更快」是沒有意義的。這將取決於許多因素。但是,一般來說,在其他條件相同的情況下,順序寫入一個文件,然後逐漸寫入下一個文件等,可以實現更好的CPU和磁盤緩存,並且可以減少查找時間和文件碎片。或者,如果你的文件太小以至於這些效果不起作用,那麼哪種方式更快也是無關緊要的。 – hyde

回答

3

您是否知道std :: endl會不斷沖洗您的ofstreams?您可以推出'\ n'個字符,只需在每個流的末尾刷新一次即可。

I/O可能仍然是您花費的最大時間,但是您正在反對緩衝,並且在此示例中似乎至少不會從中獲得任何收益。由於更好的內存局部性(除非你使用的內存太多而將頁面交換到磁盤),一次只需要一個數組/文件就可以給你提供無限快的性能,但是這種差異可能完全喪失了巨大的代價文件寫作。