我是C++的新手,我正在尝试实现一个向后循环,我创建了非常好的解决方案,但我想知道我的版本不正确并进行无限循环.
这是我创建的一个工作版本(我不明白我们如何减少i条件......):
for (unsigned i = size ; i-- > 0 ; )
{
// do stuff with i
}
Run Code Online (Sandbox Code Playgroud)
这是我写的一个版本,它可以工作,但不会降到0(这种方式对我来说似乎更合乎逻辑):
for (unsigned i = size-1 ; i > 0 ; i--)
{
// do stuff with i
}
Run Code Online (Sandbox Code Playgroud)
如果我说例如n=10,如果我print i在循环中,我会得到这个:
9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)
这里的版本对我来说更合乎逻辑,应该归零,但是提供了一个无限循环.
for (unsigned i = size-1 ; i >= 0 ; i--)
{
// do stuff with i
}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么最后一个版本不起作用,最好的选择是什么?
一个unsigned数字总是 > = 0.(当它达到零时,另一个减量将其设置为std::numeric_limits<unsigned>::max())
所以你的最终for循环相当于
for (unsigned i = size-1 ; true ; i--)
当然,它永远循环.
在第一个循环中,您具有 i-- > 0停止条件.当i为零时,i--是一个值为零的表达式(因此循环停止),尽管i然后设置为std::numeric_limits<unsigned>::max().有些人喜欢(包括我;提示downvotes)写作i-->0并-->视为幻灯片操作符.请参阅C++中的" - >"运算符是什么?