作为问题 Plus One
的 leetcode 用户提交找到。
vector<int> plusOne(vector<int>& digits) {
for (int i=digits.size(); i--; digits[i] = 0)
if (digits[i]++ < 9)
return digits;
digits[0]++;
digits.push_back(0);
return digits;
}
通常情况下,条件语句中有一些类似 i >= 0;
的 for 循环如何终止而不访问某些 -i 元素?
最佳答案
当第二个表达式为 false
或 contextually converted to a bool value 时,for 循环终止。产生 false
。在 C++ 中,0 根据上下文转换为 false;所有其他整数在 bool 上下文中转换为 true。 (感谢 M.M. 提供链接。)
所以在每个循环的开始,表达式 i--
被求值。它只是一个表达式,所以它会产生一个结果。如果它产生的结果为零,循环将结束。如果您以前没有见过这个表达式,下面是它的工作原理:
- 它既递减 i 又返回递减前 i 的原始值。因此,如果
i
为 5,则评估i--
的“结果”将是 5,但作为副作用,i
将在之后为 4评估。
大图:i
每次递减 1,因此假设它开始为正,它将下降到 0,此时评估 i--
将产生 0。
关于c++ - 这个 for 循环是如何终止的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56387667/