[問題] 未知行數二維陣列讀檔

看板C_and_CPP作者時間9年前發表 (2016/03/23 13:41), 9年前編輯推噓6(8225)
留言35則, 11人參與, 最新討論串1/1
開發平台(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

03/23 22:24, , 1F
#include"iostream"???
03/23 22:24, 1F

03/23 22:25, , 2F
參考vector::emplace_back、vector::resize
03/23 22:25, 2F

03/24 00:51, , 3F
iostream那個好像沒差XD 繼續研究中...
03/24 00:51, 3F

03/24 01:41, , 4F
你要這樣寫,就宣告vector的時候先給size
03/24 01:41, 4F

03/24 01:41, , 5F
建議你用container前都去翻一下document
03/24 01:41, 5F

03/24 02:01, , 6F
其實沒一定要怎寫耶 你有什麼推薦的寫法嗎
03/24 02:01, 6F

03/24 02:17, , 7F
用push_back
03/24 02:17, 7F

03/24 07:39, , 8F
好屌你陣列是空的捏
03/24 07:39, 8F

03/24 09:06, , 9F
為什麼陣列是空的很屌阿??
03/24 09:06, 9F

03/24 09:06, , 10F
push_back 我是聽說比較沒效率 就沒再研究了@@
03/24 09:06, 10F

03/24 10:09, , 11F
你是來問問題的還是來嘴砲的?
03/24 10:09, 11F
我也很想知道推文是來回答問題還是回答嘴砲的XDD

03/24 12:45, , 12F
麻煩請虛心求教好嗎... 感覺你沒有很認真想學...
03/24 12:45, 12F
你說的算

03/24 12:46, , 13F
先用過push_back試試吧,不要用聽說的
03/24 12:46, 13F

03/24 13:10, , 14F
有點理工精神好嗎?
03/24 13:10, 14F

03/24 13:11, , 15F
"聽說"效率差?所以就沒"研究"?你連研都沒有還來說究
03/24 13:11, 15F

03/24 13:13, , 16F
push_back每家的實作都不大相同,但是效率不會差到拿來
03/24 13:13, 16F

03/24 13:15, , 17F
連這種應用場景都做不到..真的需要優化,以後再說好嗎?
03/24 13:15, 17F

03/24 13:16, , 18F
連做Benchmark、RTFM都懶,那用什麼工具都沒效率好嗎
03/24 13:16, 18F
我後來是直接用getline找出行數, 再用這個定值做剩下的部分啦@@ 但想說還是有點冗, 所以還是把文留下來看有沒有人有些建設性的意見

03/24 13:16, , 19F
我覺得vector效率也很差
03/24 13:16, 19F
我昨天找到vector這個東西就湊合著用了, 也不是很清楚 本來是想說這樣就不用先設size, 但後來也不知道怎麼用才是 你如果有效率更好的方法也可以給我些意見

03/24 13:20, , 20F
我覺得std::cout的效率也很差www
03/24 13:20, 20F

03/24 13:21, , 21F
對阿 怎麼不用printf(ry
03/24 13:21, 21F
這個我知道, 但我只是想表達要輸出而已

03/24 13:24, , 22F
樓上,我都用內嵌組合語言int 0x21,因為printf太慢了
03/24 13:24, 22F

03/24 13:39, , 23F
等你真的有效率的需求 再來考慮效率問題好嗎
03/24 13:39, 23F
這部分我應該沒講清楚, 因為row有上億筆, 我目前是關心這部分的效率

03/24 15:38, , 24F
洨弟輸惹QQ
03/24 15:38, 24F
為什? ※ 編輯: ericrobin (140.112.25.99), 03/24/2016 16:42:40 ※ 編輯: ericrobin (140.112.25.99), 03/24/2016 16:46:28

03/24 17:10, , 25F
你的資料量這麼大 那你需要先用std::vector::max_size()看
03/24 17:10, 25F

03/24 17:10, , 26F
看vector最大的容量能不能合乎你的要求 不行的話就還是用
03/24 17:10, 26F

03/24 17:11, , 27F
array吧
03/24 17:11, 27F

03/24 17:17, , 28F
謝謝 這功能我會試試看 後來我用getline找出行數就順利
03/24 17:17, 28F

03/24 17:17, , 29F
做下去了 所以應該是沒這部分的問題
03/24 17:17, 29F

03/24 17:20, , 30F
但還是滿想知道該怎麼將陣列逐元素讀到最後一行自己停
03/24 17:20, 30F

03/24 17:27, , 31F
你是指讀陣列還是讀檔案?
03/24 17:27, 31F

03/24 22:48, , 32F
檔案eof()、vector end()-1
03/24 22:48, 32F

03/24 22:50, , 33F
IO效率問題,用硬體讀取速度、程式讀取速度、文件大小
03/24 22:50, 33F

03/24 22:51, , 34F
算一下,不會差太多的話不是問題
03/24 22:51, 34F

03/25 15:10, , 35F
我是從檔案讀的@@ ; 樓上方法我會試試 謝謝
03/25 15:10, 35F
文章代碼(AID): #1Myfpjte (C_and_CPP)