c++ - For 循环退出条件(size_t 与 int)

标签 c++ for-loop int size-t

<分区>

当我在我的程序中放入以下内容时:

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) 为什么第二个代码片段执行失败?

(B) 为什么第三个代码片段相应地执行而第二个代码片段没有执行?

任何见解将不胜感激!

最佳答案

所有循环都向前,甚至是向后的循环。

你想要的是:

for (std::size_t i = 0, e = VectorOfStructs.size(); i != e; ++i)
{
    std::size_t const ri = e - i - 1;

    // use "VectorOfStructs[ri]"
}

或者更好:

for (auto rit = VectorOfStructs.rbegin(); rit != VectorOfStructs.rend(); ++rit)
{
    // use "*rit"
}

(您的第二个片段失败,因为 i 是无符号的,因此 -1 被转换为与 i 相同的类型并成为最大可表示值,因此比较始终为真。相比之下,i 在第三个代码段中已签名。)

关于c++ - For 循环退出条件(size_t 与 int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659368/

相关文章:

c++ - 代码运行时 OpenGL 白色窗口 glew/glfw3

c++ - 为什么 unique_ptr 对 auto_ptr 有重载?

arrays - Haxe - FOR 作为内联表达式

r - 使用 for 循环进行双重求和

android - 实现三星指纹 API : "Expected to unbox a ' int' primitive type but was returned null"时出现非常奇怪的错误

java - 双倍和国际博士。 java

c++ - 为什么在 C++11 中使用非成员开始和结束函数?

c++ - 重新排列单线以形成闭合的多边形?

java - LocalDate 解析抛出异常‽

javascript - PNG 未使用 PhantomJS 在循环中多次尝试进行渲染