我可以想到两种不同的方法来遍历2d范围,要么使用嵌套循环分别遍历行和列:
for (int i = 0; i < width * height; i++) {
int x = i % width;
int y = i / width;
//Do stuff
}
或使用单个for循环遍历区域并计算行和列:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
//Do stuff
}
}
在我的应用程序的宽度和高度可以非常大,所以我需要知道哪一个将执行更好的大量迭代。
width * height
可能溢出。有符号整数溢出(仍然)是未定义的行为。i % 0
为未定义行为。i / 0
也是未定义行为。您可以保护第一个版本不出现这些问题,但在第二个版本中,这些问题都不存在。
不要过早优化。:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
//Do stuff
}
}
比平面循环更简单,更易读,而且最重要的是它是正确的(无论height
和width
的值如何)。
如果你真的关心性能,你应该首先编写正确的和经过测试的代码,然后测量和分析它。