c++ - 这个 for 循环是如何终止的?

标签 c++ for-loop conditional-statements

作为问题 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 元素?

最佳答案

当第二个表达式为 falsecontextually 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/

相关文章:

python - 变量返回奇怪的数字

mysql - 搜索 2 列的上下文 MySQL 结果

javascript - Javascript If 语句中的多个条件

c++ - 隐藏容器的类的更好接口(interface)

c++ - 获得最佳组合的算法

c++ - 为什么我的程序在调用 main 之前就退出了?

c - 如何使用不带数组的 for 循环编写在 c 中打印特定数字螺旋图案的代码

c - 为什么这个应该随着循环逐渐增加的值会达到无返回点?

java - 可嵌入的跨平台 Web 浏览器?

css - 表达式引擎导航和条件