Ril*_*azy -1 c++ optimization for-loop
我可以想到两种不同的方法来迭代二维范围,或者使用嵌套循环分别迭代行和列:
for (int i = 0; i < width * height; i++) {
int x = i % width;
int y = i / width;
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
或使用单个 for 循环迭代该区域并计算行和列:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,宽度和高度可能非常大,因此我需要知道哪一个在大量迭代中表现更好。
width * height可能会溢出。有符号整数溢出(仍然)是未定义的行为。i % 0是未定义的行为。i / 0也是未定义的行为。您可以保护第一个版本免受此类问题的影响,尽管在第二个版本中不存在这些问题。
不要进行过早的优化。这:
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
height比平面循环更简单、更具可读性,而且最重要的是它是正确的(无论和 的值如何width)。
如果您确实关心性能,则应该首先编写正确且经过测试的代码,然后对其进行测量和分析。