[問題] vector是否有正確用法

看板C_and_CPP (C/C++)作者 (hth9494)時間9年前 (2017/01/19 22:17), 9年前編輯推噓6(609)
留言15則, 5人參與, 最新討論串1/1
問題(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

01/19 22:48, , 1F
std::vector people(n, 0); 是指塞 n 個 0 的意思
01/19 22:48, 1F

01/19 22:49, , 2F
你想要的是 std::vector::reserve() 吧 (?
01/19 22:49, 2F
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

01/20 00:55, , 3F
前者L33會走出陣列所以得到錯誤的答案吧
01/20 00:55, 3F

01/20 01:30, , 4F
A的理解是對的 但我覺得是錯在其它地方
01/20 01:30, 4F

01/20 01:33, , 5F
nowPos是n-1的時候 nowPos++可能就導致vector錯誤了
01/20 01:33, 5F

01/20 01:33, , 6F
至於array沒錯應該是剛好對的 因為array改到超出範圍
01/20 01:33, 6F

01/20 01:34, , 7F
會改到他後面宣告的變數
01/20 01:34, 7F

01/20 01:37, , 8F
更正:不一定會改到後面宣告的變數 但不會讓程式當機
01/20 01:37, 8F
發現錯誤了,line 32 加個 nowPos %= n 就對了 的確是走到vector外,array會對真的是湊巧 感謝 ※ 編輯: hth9494 (114.42.99.70), 01/20/2017 01:41:26

01/20 08:46, , 9F
寫法習慣好多不好XD while的true換成真的判斷式比較好
01/20 08:46, 9F

01/20 08:49, , 10F
既然要用stl容器 就盡量用iterator和容器的method
01/20 08:49, 10F

01/20 08:51, , 11F
所以1f才會說用reserve 然後之後用push_back
01/20 08:51, 11F
謝謝大大指點 ※ 編輯: hth9494 (114.42.99.70), 01/20/2017 09:58:43

01/20 23:06, , 12F
是超界吧 然後static array沒檢查邊界
01/20 23:06, 12F

01/20 23:07, , 13F
我覺得宣告沒什麼問題
01/20 23:07, 13F

01/20 23:07, , 14F
並沒有一定要用reserve 吧
01/20 23:07, 14F

01/20 23:08, , 15F
你下面的now pos 有可能變成n
01/20 23:08, 15F
文章代碼(AID): #1OWCfz4R (C_and_CPP)
文章代碼(AID): #1OWCfz4R (C_and_CPP)