当迭代2D结构时,迭代总长度或使用嵌套循环迭代行和列是更快?

  • 本文关键字:迭代 嵌套循环 结构 2D c++ for-loop optimization
  • 更新时间 :
  • 英文 :


我可以想到两种不同的方法来遍历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
}
}

比平面循环更简单,更易读,而且最重要的是它是正确的(无论heightwidth的值如何)。

如果你真的关心性能,你应该首先编写正确的和经过测试的代码,然后测量和分析它。

相关内容

  • 没有找到相关文章

最新更新