C++ 我可以用 1 个循环替换嵌套循环吗

标签 c++ for-loop nested-loops simplification

所以我一直在尝试做一些代码简化,主要是因为我不太喜欢嵌套 For 循环,但是我在尝试简化下面的代码时遇到了麻烦。代码运行得非常好并且按预期运行(下面的代码被精简了!)。

int fill{200}, wid{600}, hei{400};
for (int w{ 0 }; w < fill; w++) {
    for (int h{ 0 }; h < hei; h++) {
        int offset{ w + h * (wid + fill) }
        //Offset is used to traverse a 1d array "fill" amount of times.
        /*Before:
        000000
        000000
        000000
        000000
          After:
        110000
        110000
        110000
        110000*/
    }
}

我试图用少 1 个循环来重现相同的输出,但我要么没有得到正确的结果,要么我超出了数组范围。所以我想知道可以做到吗?

最佳答案

我不确定我是否会推荐它,但为了科学......你去吧。它给了我确定。这个想法很简单。您可以通过乘法将两个数字合二为一,然后通过除法和取模检索它们。

请记住一定不要在乘法时溢出。我还会留下一张纸条,我没有检查是否正确选择了所有类型。例如,仅此一项 int offset{ w + h * (wid + fill) }; 就向我举起了旗帜。所以下面的代码主要用于数学/方法。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    std::vector<int> loop1, loop2;
    int fill{200}, wid{600}, hei{400};

    for (int w{ 0 }; w < fill; w++) {
      for (int h{ 0 }; h < hei; h++) {
        int offset{ w + h * (wid + fill) };
        loop1.push_back(offset);
      }
    }

    for (int i{ 0 }; i < fill*hei; i++) {
      int w = i / hei;
      int h = i % hei;
      int offset{ w + h * (wid + fill) };
      loop2.push_back(offset);
    }

    if (loop2 == loop1) cout << "OK\n";
    else cout << "NOT OK\n";
    return 0;
}

关于C++ 我可以用 1 个循环替换嵌套循环吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26476823/

相关文章:

c++ - 即使初始要求为真,也不会进入 for 循环

c++ - 多个列表的高效排列算法

c++ - 在 C++ 中将 Gstreamer 与 Google 语音 API(流式转录)结合使用

python-3.x - 如何将嵌套 for 循环的输出转换为 Python 中的列表?

c++ - QSystemTrayIcon激活信号: DoubleClick without Trigger

java - 变量 "j"无法解析为变量 - 二维数组

python - 列表索引超出范围 : python

python - 迭代数据框并根据条件替换值

python - 在 Python 中嵌套 for 循环的替代方法

javascript - 使用javascript循环遍历具有多个子对象的JSON对象