所以我一直在尝试进行一些代码简化,主要是因为我并不喜欢使用嵌套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个循环重现相同的输出,但我要么得不到正确的结果,要么我走出阵列。所以我想知道它可以做到吗?
答案 0 :(得分: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;
}