作者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/cn.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