看板 C_and_CPP 關於我們 聯絡資訊
問題(Question): 不好意思,標題下的可能不是很好 是這樣 今天寫到這題 UVa https://goo.gl/IuO3Qz zerojudge https://goo.gl/6bzCBe 一開始我給的程式碼是 (請注意line 8) http://codepad.org/XNCY5sDf 然後不論 UVa 還是 zj 都吃了WA 後來改成這樣就都AC了 (把前面的line 8改成這份的line 7) http://codepad.org/XoYfLR2j 問題是 兩份程式碼只差一行宣告和include而已 其他地方完全沒改 是不是我vector的用法導致吃WA 請問該怎麼改 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.99.70 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484835453.A.11B.html
Hazukashiine: std::vector people(n, 0); 是指塞 n 個 0 的意思 01/19 22:48
Hazukashiine: 你想要的是 std::vector::reserve() 吧 (? 01/19 22:49
reserve() 是增加capacity用的嗎 ? 我是希望有一個size為n的空間可以使用 而且沒有要再增加size,所以應該也不用增加capacity 我以為我宣告std::vector<int> people(n, 0)的話 它應該會自動幫我增加size和capacity的大小到n才對 還是說我理解有誤 請指正我一下 ※ 編輯: hth9494 (114.42.99.70), 01/19/2017 23:59:30
c910335: 前者L33會走出陣列所以得到錯誤的答案吧 01/20 00:55
ilikekotomi: A的理解是對的 但我覺得是錯在其它地方 01/20 01:30
ilikekotomi: nowPos是n-1的時候 nowPos++可能就導致vector錯誤了 01/20 01:33
ilikekotomi: 至於array沒錯應該是剛好對的 因為array改到超出範圍 01/20 01:33
ilikekotomi: 會改到他後面宣告的變數 01/20 01:34
ilikekotomi: 更正:不一定會改到後面宣告的變數 但不會讓程式當機 01/20 01:37
發現錯誤了,line 32 加個 nowPos %= n 就對了 的確是走到vector外,array會對真的是湊巧 感謝 ※ 編輯: hth9494 (114.42.99.70), 01/20/2017 01:41:26
Ommm5566: 寫法習慣好多不好XD while的true換成真的判斷式比較好 01/20 08:46
Ommm5566: 既然要用stl容器 就盡量用iterator和容器的method 01/20 08:49
Ommm5566: 所以1f才會說用reserve 然後之後用push_back 01/20 08:51
謝謝大大指點 ※ 編輯: hth9494 (114.42.99.70), 01/20/2017 09:58:43
steve1012: 是超界吧 然後static array沒檢查邊界 01/20 23:06
steve1012: 我覺得宣告沒什麼問題 01/20 23:07
steve1012: 並沒有一定要用reserve 吧 01/20 23:07
steve1012: 你下面的now pos 有可能變成n 01/20 23:08