→ lNishan: 用C的Standard library 12/19 19:12
→ fireslayer: 每一個iter都把buff清空成/0看看 12/19 20:13
→ fireslayer: \0 12/19 20:13
→ fireslayer: \0 12/19 20:14
→ LiloHuang: 該範例中的 is.gcount() 就會是最後一次成功讀取的數量 12/19 20:14
→ LiloHuang: 塞進去 std::list 會比較慢,可能是有多餘的字串拷貝 12/19 20:15
→ LiloHuang: 可考慮搭配 std::shared_ptr<std::string> 來嘗試改善 12/19 20:16
推 LiloHuang: 另外,講求性能的檔案讀取請愛用 memory-mapped file 12/19 20:23
→ LiloHuang: 可直接將檔案映射為一個記憶體位址,實在是快速又方便 12/19 20:27
推 damody: 你的list是arraylist還是LinkedList?? c++是要用vector吧 12/19 20:32
→ damody: 你沒丟程式碼感覺不出你的問題在哪 請樓下隔空抓藥 12/19 20:32
→ damody: 你編譯的是 release mode 還是 debug mode也有差 12/19 20:33
→ damody: 是linklist沒錯 你的list改存string*會快很多 12/19 20:34
推 iwami: 請問為什麼用ios::binary啊?C++字串的結尾都是用'\0'來標記 12/19 21:53
→ iwami: 但是binary沒有 12/19 21:54
→ descent: 用 getline 直接存到 string,c++比 java慢,實在不服氣 12/19 21:58
→ PkmX: 先把完整程式貼上來再說吧 不是每個人都有買水晶球好嗎= = 12/19 22:19
推 LPH66: >iwami 如果是用 std::string (像原 PO) 那就不需要 \0 12/19 22:30
→ iwami: 抱歉,我指的是char[]char*這類東西 12/20 02:34
感謝各位前輩的幫助以及建議
不過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
→ lNishan: String是一個object,你push進去的時候會把內容全部複製 12/20 02:59
→ lNishan: 一遍 (整個字串); 12/20 02:59
→ lNishan: String *只是指標(ie. 記憶體位置),只有64 bits 12/20 03:01
→ lNishan: (假設是64位元OS) 12/20 03:01
→ lNishan: 但是如果用指標要小心scope,小心dangling pointer 12/20 03:06
→ lNishan: 然後用char string + fgets 會快更多 12/20 03:07
→ lNishan: linked list 自己寫也會快一些 12/20 03:17
→ lNishan: 或是換GCC,下O3(優化),應該又會更快;反正方法很多 12/20 03:19
推 LiloHuang: 若是 VS2013 可直接用 std::shared_ptr<std::string> 12/20 10:11
→ LiloHuang: raw pointer 也沒什麼不好,要小心 memory leak 就是 12/20 10:12
→ googled: 我明白了,非常謝謝各位前輩的建議跟教學,感謝 12/22 18:19