[問題] 請問list的效率以及讀檔問題
各位高手好,
小弟目前有一隻非常要求執行效率的程式
本來是用JAVA在寫,且也已經盡量的去改善效能
但始終突破不了紀錄保持人的速度,
最近想說改用C++來寫寫看
可是光是第一步讀檔步驟,速度馬上就輸了java的bufferedReader
我想說把C++的讀檔也改成可以像JAVA那樣有緩衝區,減少從硬碟讀取檔案的次數
但每次檔案讀到尾端時,就會出現亂碼,我緩衝區的大小設1024
我在猜是不是因為最後檔案接近尾端時,檔案內容根本不足1024,所以才會出現亂碼?
想請各位高手指點我一下
ifstream fileInput;
fileInput.open ("1.txt", ios::binary );
char buff[1024];
string str;
while(fileInput){
fileInput.read(buff,1024);
str = buff;
cout<<str<<endl;
}
這是我用小檔案測試讀檔的內容:http://ppt.cc/EnhB
如果真得是因為檔案最後的內容不足1024。因此出現亂碼
那想請問該如何才能知道最後還剩多少內容還沒讀取?
以便讓我修改緩衝區的大小
或者說我這實做方法根本就是錯誤的,謝謝。
另外就是雖然C++的list跟JAVA的linkedList內部實作上也許不太一樣
但原理應該是大同小異(我猜的)
不曉得為什麼同樣都是push_back相同的數量
但c++的list卻比java慢很多@@
例如說我塞一千個string進去,C++要0.6秒,JAVA卻只要0.009秒
整個速度有著很大的差距@@
想請問說是有什麼關鍵的東西是我沒注意到的嗎?
感謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.174.86.224
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1418986898.A.68B.html
→
12/19 19:12, , 1F
12/19 19:12, 1F
→
12/19 20:13, , 2F
12/19 20:13, 2F
→
12/19 20:13, , 3F
12/19 20:13, 3F
推
12/19 20:13, , 4F
12/19 20:13, 4F
→
12/19 20:14, , 5F
12/19 20:14, 5F
→
12/19 20:14, , 6F
12/19 20:14, 6F
→
12/19 20:15, , 7F
12/19 20:15, 7F
→
12/19 20:16, , 8F
12/19 20:16, 8F
推
12/19 20:23, , 9F
12/19 20:23, 9F
→
12/19 20:27, , 10F
12/19 20:27, 10F
推
12/19 20:32, , 11F
12/19 20:32, 11F
→
12/19 20:32, , 12F
12/19 20:32, 12F
→
12/19 20:33, , 13F
12/19 20:33, 13F
→
12/19 20:34, , 14F
12/19 20:34, 14F
推
12/19 21:53, , 15F
12/19 21:53, 15F
→
12/19 21:54, , 16F
12/19 21:54, 16F
→
12/19 21:58, , 17F
12/19 21:58, 17F
→
12/19 22:19, , 18F
12/19 22:19, 18F
推
12/19 22:30, , 19F
12/19 22:30, 19F
→
12/20 02:34, , 20F
12/20 02:34, 20F
感謝各位前輩的幫助以及建議
不過d大提到的用release執行的話會有差,我改過去後確實速度有提升
再額外選擇『啟動但不偵錯』的話,
不管是讀檔還是push_back速度真的有快超多
原來是我自己搞烏龍了...抱歉抱歉
可是想請問一下為什麼list改存string*會快很多?
感覺上不是一樣的意思嗎@@
另外我用ios::binary是因為查教學時大家都用這種才跟著用的@@
不然我原本是用ios::in,不過也許是我的寫法拙劣的關係,速度上感覺不出差異
而讀取檔案的部分我原本也是用getLine,想說這樣很方便,
不過不曉得為什麼我用ifstream::getLine讀取一行後在轉string的速度
會比直接用string::getLine的速度快很多orz...
再次感謝各位前輩的幫助,謝謝~
※ 編輯: googled (1.174.86.224), 12/20/2014 02:55:33
→
12/20 02:59, , 21F
12/20 02:59, 21F
→
12/20 02:59, , 22F
12/20 02:59, 22F
→
12/20 03:01, , 23F
12/20 03:01, 23F
→
12/20 03:01, , 24F
12/20 03:01, 24F
→
12/20 03:06, , 25F
12/20 03:06, 25F
→
12/20 03:07, , 26F
12/20 03:07, 26F
→
12/20 03:17, , 27F
12/20 03:17, 27F
→
12/20 03:19, , 28F
12/20 03:19, 28F
推
12/20 10:11, , 29F
12/20 10:11, 29F
→
12/20 10:12, , 30F
12/20 10:12, 30F
→
12/22 18:19, , 31F
12/22 18:19, 31F