看板 EE_DSnP 關於我們 聯絡資訊
是array遇到的問題是也! 在使用adta -r 的時候,原本都還很順利,跑出來的隨機值也跟參考檔案一樣 但是只要一reset,問題就出現了! adta -r 10 adtp adtr 3 adta -r 1 adtp adta -r 1 adtp ......(重複二三十次) RESET之後第一個加進去的數,跟參考檔案一樣 但第二個加進去的,在參考檔案中卻是在第三個才出現 第三個 ====> 第六個 第四個 ====> 第十一個 第五個 ====> 第十二個 第六個以後就疑似永遠丟失了,在參考檔案中找不到相同的值 這當然就是傳說中的多叫了constructor吧... 可是我根本不知道是哪裡會需要呼叫constructor,而且只要不RESET就沒問題 RESET前跟RESET後可能有什麼差別嗎? 我的RESET就只是把三個data member全部設成零,這不就回到最初的純潔狀態了嗎? 到底...能有什麼差別呢? -- 春苑樹雪菜萌苗,雀兒喜上夏枝梢;藍眼望盡黃泉路,只盼儷人一美笑長巾初解投送抱,金珠麗葉賀新好;神代仙眷且羨嫉,長伴相隨誓到老。 靜馬千華留秋晚,冬風不止三鄉道;紅枝立約攜手情,今此空餘泣嚎啕。 姬宮千歌音悠悠,櫻井奏樂聲裊裊;奈何天令伊人變,飛離斯愛離斯去。 結城AIRA→ 悲慟獨泣無人應,白晝夢盡皆空語。 ←美鄉あき Kalafina→ 紅月旋響戚音樂,黯然步上鎮魂旅 ←飛 蘭 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.196
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