推 shryuhuai:reset不用清除記憶體 11/27 17:48
→ takua624:我有看到這句,不過不懂意思。是指_data不用變成零嗎? 11/27 17:59
→ e124553423:意思是reset時不用delete[] (保留array的_capacity) 11/27 18:02
→ e124553423:修改_size就好 11/27 18:03
→ e124553423:當然_data也就不能動囉(不然就找不到那塊記憶體了 11/27 18:06
上一個問題好像解決了,但又有新的沒天良的情況出現:
我的DO2結果跟參考檔案有微妙的差異。
於是我就把DO2修改一下,把出現的那三個大得要命的數字改掉:
5000、50000、10000改成50、500、100
結果跟參考檔一樣。
後來慢慢增加,一路加到5000、45000、8000,結果還是跟參考檔一樣
似乎偏偏就是DO2不行。
教授說亂數的產生跟執行速率無關,可是...
※ 編輯: takua624 來自: 140.112.4.196 (11/27 18:49)
→ e124553423:你是指執行時間嗎? 11/27 19:45
→ e124553423:搜尋的時候用binary search會比較快喔~ 11/27 19:48
→ e124553423:如果是記憶體使用比較大的話,可能是有些函數中間產生 11/27 19:55
→ e124553423:的動態記憶體沒有刪掉導致越積越多 11/27 19:55
推 ric2k1:這個... 我覺得還是不要花時間調它吧,可以先看 bst 11/27 21:42
這個狀況也解決了。原來是我的insert(T& x)在檢查x是否已存在於array之前
就先判斷需不需要擴充array,
例如今天array的內容是 nba mlb cwt gto fta ric ntu swr
size = capacity = 8
如果程式隨機產生了一個ric,錯誤的insert會先把capacity擴充成16,
結果發現ric已經有了,所以什麼都沒存進去。
正確的insert是先發現ric已經在array裡面,所以決定什麼都不動,直接return false
會多呼叫constructor就是"明明沒有要加東西,還resize原本的array"造成的。
希望這樣寫可以對爬文的同胞有幫助。
※ 編輯: takua624 來自: 61.57.147.96 (11/28 17:05)
→ e124553423:我是覺得先擴充沒什麼差欸,反正之後還是有機會用到XD 11/28 17:18
→ takua624:如果很執著要讓結果跟參考檔案一樣的話那就有差 11/28 22:41
→ takua624:那樣寫當然是對的啦 11/28 22:41