for 循环与 while 循环的 C++ 行为

标签 c++ loops for-loop compiler-construction

据我所知,当你写一个类似于这个的for循环时

for (int i = 0; i < SOME_NUM; i++) { 
  if (true)
    do_something();
  else
    do_something_else();
}

此操作的时间复杂度主要受 if (true) 语句的影响,因为 for 循环迭代实际上并不涉及 iSOME_NUM,编译器基本上只会运行 for 循环内的代码 SOME_NUM 次。如果我错了,请纠正我。

但是,如果这是正确的,那么以下嵌套 for 循环的行为如何?

for (int i = 0; i < SOME_NUM; i++) {
  for (int j = 0; j < i; j++) {
   do_something();
  } 
}

内部 for 循环中的 j 现在是 i 的上限,该值在每次循环重新启动时都会更改。编译器将如何编译它?这些嵌套的 for 循环本质上是否像内部带有 while 循环的 for 循环?如果您正在编写一个使用嵌套 for 循环的算法,其中内部计数变量取决于外部计数变量,您是否应该担心这会对算法的复杂性造成什么影响?

最佳答案

“如果我说错了请指正。”

你错了。

您可以在“第一个”循环的某处添加 i++,这会“破坏”您的代码。当然会执行 iSOME_NUM 的比较。

关于for 循环与 while 循环的 C++ 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986847/

相关文章:

c++ - 链接器需要 lib 文件名称中的编译器和 Boost 版本。 fatal error LNK1104

java - 如何编写java程序读取5个数字并计算有多少个数字的值是0-9

PHP登录表单错误

python - 检查元素是否是邻居,然后创建一个新列

C++如何知道在状态模式中转发声明的位置

c++ - GCC Eclipse 中的“ undefined reference ”错误

c++ - 在 map C++ 中迭代和使用 find()

c++ - 如何使用 "while loop "打印正确的输出?

java - 将 Random() 类与增强的 for 循环一起使用

java - 如何为多个JLabel[]添加鼠标监听器