被发现为用户在leetcode上针对问题Plus One
的提交。
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;
的东西,该循环如何终止而不访问某些-i元素?
答案 0 :(得分:2)
当第二个表达式为false
或contextually converted to a bool value产生false
时,for循环终止。在C ++中,0在上下文中转换为false;所有其他整数在布尔上下文中都将转换为true。 (感谢M.M.提供的链接。)
因此,在每个循环的开始,都会对表达式i--
进行求值。它只是一个表达式,因此会产生结果。如果产生的结果为零,则循环将结束。如果您以前从未见过此表达式,请按以下步骤操作:
i
为5,则评估i--
的“结果”为5,但副作用是,评估之后i
为4。大图:i
每次递减1,因此假设它从正数开始,它将降为0,这时评估i--
将产生0。