这个for循环如何终止?

时间:2019-05-31 01:41:25

标签: c++ for-loop conditional-statements

被发现为用户在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元素?

1 个答案:

答案 0 :(得分:2)

当第二个表达式为falsecontextually converted to a bool value产生false时,for循环终止。在C ++中,0在上下文中转换为false;所有其他整数在布尔上下文中都将转换为true。 (感谢M.M.提供的链接。)

因此,在每个循环的开始,都会对表达式i--进行求值。它只是一个表达式,因此会产生结果。如果产生的结果为零,则循环将结束。如果您以前从未见过此表达式,请按以下步骤操作:

  • 它既减小i并返回i减小前的原始值。因此,如果i为5,则评估i--的“结果”为5,但副作用是,评估之后i为4。

大图:i每次递减1,因此假设它从正数开始,它将降为0,这时评估i--将产生0。