【发布时间】:2015-10-18 00:13:05
【问题描述】:
当我在我的程序中加入以下内容时:
for (size_t i = VectorOfStructs.size()-1; i > 0; i--)
它可以正常工作,但“i”永远不会等于 0。 所以,我无法访问第一个元素 (VectorOfStructs[0])。
如果我将其更改为:
for (size_t i = VectorOfStructs.size()-1; i > -1; i--)
程序甚至没有进入 for 循环!但是,如果我将其更改为以下内容:
for (int i = VectorOfStructs.size()-1; i > -1; i--)
它完全按照我的意愿工作(遍历所有元素)。
所以,我的问题是:
(A)为什么第二段代码sn-p执行失败?
(B) 为什么第三个代码 sn-p 会相应地执行,而第二个没有?
任何见解将不胜感激!
【问题讨论】:
-
size_t 是无符号类型,它永远不会大于
(size_t)-1。大多数编译器都会为此类代码生成警告,您需要将其打开。 -
或许更好:
for (auto iter = VectorOfStructs.rbegin(); iter != VectorOfStructs.rend(); ++iter) { /* use *iter */ } -
如果你想向后迭代,你应该在
for循环的第二部分检查i-- > 0并删除for循环的第三部分