看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 想要從檔案讀取一個二維陣列, 檔案以空白為分隔, 每三段數字應該讀成一列 (row) 已知的話我會 但在總列數未知的情況下, 不知道該怎麼讀才對 目前只能想到類似下面這樣的寫法, 但總會跳出: vector subscript out of range 的警告視窗而不能跑 想請問該怎麼修正才是? 程式碼(Code) #include <fstream> #include "iostream" #include <vector> using namespace std; int main() { fstream file; file.open("abc.txt", ios::in); if (!file) cout << "error! \n"; int i = 0; vector<int> A; vector<int> B; vector<int> C; while (file >> A[i] >> B[i] >> C[i]) { i++; } file.close(); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.76.126 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1458740461.A.DE8.html
Caesar08: #include"iostream"??? 03/23 22:24
Caesar08: 參考vector::emplace_back、vector::resize 03/23 22:25
ericrobin: iostream那個好像沒差XD 繼續研究中... 03/24 00:51
fatrabitree: 你要這樣寫,就宣告vector的時候先給size 03/24 01:41
fatrabitree: 建議你用container前都去翻一下document 03/24 01:41
ericrobin: 其實沒一定要怎寫耶 你有什麼推薦的寫法嗎 03/24 02:01
IKAFIRE: 用push_back 03/24 02:17
steve1012: 好屌你陣列是空的捏 03/24 07:39
ericrobin: 為什麼陣列是空的很屌阿?? 03/24 09:06
ericrobin: push_back 我是聽說比較沒效率 就沒再研究了@@ 03/24 09:06
Caesar08: 你是來問問題的還是來嘴砲的? 03/24 10:09
我也很想知道推文是來回答問題還是回答嘴砲的XDD
Clangpp: 麻煩請虛心求教好嗎... 感覺你沒有很認真想學... 03/24 12:45
你說的算
james732: 先用過push_back試試吧,不要用聽說的 03/24 12:46
ronin728: 有點理工精神好嗎? 03/24 13:10
ronin728: "聽說"效率差?所以就沒"研究"?你連研都沒有還來說究 03/24 13:11
ronin728: push_back每家的實作都不大相同,但是效率不會差到拿來 03/24 13:13
ronin728: 連這種應用場景都做不到..真的需要優化,以後再說好嗎? 03/24 13:15
ronin728: 連做Benchmark、RTFM都懶,那用什麼工具都沒效率好嗎 03/24 13:16
我後來是直接用getline找出行數, 再用這個定值做剩下的部分啦@@ 但想說還是有點冗, 所以還是把文留下來看有沒有人有些建設性的意見
bibo9901: 我覺得vector效率也很差 03/24 13:16
我昨天找到vector這個東西就湊合著用了, 也不是很清楚 本來是想說這樣就不用先設size, 但後來也不知道怎麼用才是 你如果有效率更好的方法也可以給我些意見
ronin728: 我覺得std::cout的效率也很差www 03/24 13:20
bben900911: 對阿 怎麼不用printf(ry 03/24 13:21
這個我知道, 但我只是想表達要輸出而已
ronin728: 樓上,我都用內嵌組合語言int 0x21,因為printf太慢了 03/24 13:24
suwako: 等你真的有效率的需求 再來考慮效率問題好嗎 03/24 13:39
這部分我應該沒講清楚, 因為row有上億筆, 我目前是關心這部分的效率
bben900911: 洨弟輸惹QQ 03/24 15:38
為什? ※ 編輯: ericrobin (140.112.25.99), 03/24/2016 16:42:40 ※ 編輯: ericrobin (140.112.25.99), 03/24/2016 16:46:28
suwako: 你的資料量這麼大 那你需要先用std::vector::max_size()看 03/24 17:10
suwako: 看vector最大的容量能不能合乎你的要求 不行的話就還是用 03/24 17:10
suwako: array吧 03/24 17:11
ericrobin: 謝謝 這功能我會試試看 後來我用getline找出行數就順利 03/24 17:17
ericrobin: 做下去了 所以應該是沒這部分的問題 03/24 17:17
ericrobin: 但還是滿想知道該怎麼將陣列逐元素讀到最後一行自己停 03/24 17:20
suwako: 你是指讀陣列還是讀檔案? 03/24 17:27
ronin728: 檔案eof()、vector end()-1 03/24 22:48
ronin728: IO效率問題,用硬體讀取速度、程式讀取速度、文件大小 03/24 22:50
ronin728: 算一下,不會差太多的話不是問題 03/24 22:51
ericrobin: 我是從檔案讀的@@ ; 樓上方法我會試試 謝謝 03/25 15:10