[問題] 怎麼加速讀檔 loop

看板C_and_CPP (C/C++)作者 (mself)時間15年前 (2011/01/01 16:09), 編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) Linux + GCC 問題(Question): 我寫一個程式,主體是一個迴圈並且從檔案中讀取資料來處理。例如: while(fin.good()){ fin >> time; fin >> voltage; subfunction(time, voltage); } 餵入的資料(Input): 0000 1.5 0002 1.3 0003 0.7 0009 1.1 ... 我有聽說最好把 file I/O 集中,一次讀一批會比較快 不曉得大概是怎麼做? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.69.252

01/01 16:33, , 1F
首先改用scanf就會快很多 再來你可以用getchar()自己處
01/01 16:33, 1F

01/01 16:33, , 2F
理轉換成要的格式
01/01 16:33, 2F

01/01 16:34, , 3F
C++的IO實在是慢
01/01 16:34, 3F

01/02 01:07, , 4F
為了加速而加速? 還是慢到你受不了才加速?
01/02 01:07, 4F

01/02 01:32, , 5F
提示一下, 這題的瓶頸在讀入浮點數的地方, 如果存檔的
01/02 01:32, 5F

01/02 01:33, , 6F
時候有先把它離散化, 讀進記憶體再還原運算會快很多,
01/02 01:33, 6F

01/02 01:34, , 7F
我是先讀進 std::vector<std::string>, 再用 isstream
01/02 01:34, 7F

01/02 01:36, , 8F
拿出來數值, 再來做還原, 對 2^22 行每行都是"99999 9
01/02 01:36, 8F

01/02 01:37, , 9F
9999" 的檔案, 從原本的32秒降到7秒, 佔住檔案的時間
01/02 01:37, 9F

01/02 01:37, , 10F
也變短了(使用 Code::Blocks 內建的計時)
01/02 01:37, 10F

01/02 01:51, , 11F

01/02 03:48, , 12F
推樓上!
01/02 03:48, 12F

01/02 11:33, , 13F
推l大
01/02 11:33, 13F
文章代碼(AID): #1D7k4cR5 (C_and_CPP)
文章代碼(AID): #1D7k4cR5 (C_and_CPP)