作者hth9494 (hth9494)
看板C_and_CPP
標題[問題] vector是否有正確用法
時間Thu Jan 19 22:17:15 2017
問題(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1484835453.A.11B.html
1F:→ Hazukashiine: std::vector people(n, 0); 是指塞 n 個 0 的意思 01/19 22:48
2F:→ 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
3F:→ c910335: 前者L33會走出陣列所以得到錯誤的答案吧 01/20 00:55
4F:推 ilikekotomi: A的理解是對的 但我覺得是錯在其它地方 01/20 01:30
5F:→ ilikekotomi: nowPos是n-1的時候 nowPos++可能就導致vector錯誤了 01/20 01:33
6F:→ ilikekotomi: 至於array沒錯應該是剛好對的 因為array改到超出範圍 01/20 01:33
7F:→ ilikekotomi: 會改到他後面宣告的變數 01/20 01:34
8F:推 ilikekotomi: 更正:不一定會改到後面宣告的變數 但不會讓程式當機 01/20 01:37
發現錯誤了,line 32 加個 nowPos %= n 就對了
的確是走到vector外,array會對真的是湊巧
感謝
※ 編輯: hth9494 (114.42.99.70), 01/20/2017 01:41:26
9F:推 Ommm5566: 寫法習慣好多不好XD while的true換成真的判斷式比較好 01/20 08:46
10F:推 Ommm5566: 既然要用stl容器 就盡量用iterator和容器的method 01/20 08:49
11F:推 Ommm5566: 所以1f才會說用reserve 然後之後用push_back 01/20 08:51
謝謝大大指點
※ 編輯: hth9494 (114.42.99.70), 01/20/2017 09:58:43
12F:推 steve1012: 是超界吧 然後static array沒檢查邊界 01/20 23:06
13F:→ steve1012: 我覺得宣告沒什麼問題 01/20 23:07
14F:→ steve1012: 並沒有一定要用reserve 吧 01/20 23:07
15F:→ steve1012: 你下面的now pos 有可能變成n 01/20 23:08