我可以想到兩種不同的方法來迭代 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
}
}
在我的應用程式中,寬度和高度可能非常大,所以我需要知道對于大量迭代,哪一個會表現得更好。
uj5u.com熱心網友回復:
width * height可能會溢位。有符號整數溢位是(仍然)未定義的行為。i % 0是未定義的行為。i / 0也是未定義的行為。您可以保護第一個版本免受此類問題的影響,但在第二個版本中不存在此類問題。
不要過早的優化。這個:
for (int y = 0; y < height; y ) {
for (int x = 0; x < width; x ) {
//Do stuff
}
}
比平面回圈更簡單、更具可讀性,而且最重要的是它是正確的(與height和的值無關width)。
如果您確實關心性能,則應首先撰寫正確且經過測驗的代碼,然后對其進行測量和分析。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/338042.html
上一篇:如何在特定條件下執行Foreach回圈和Mysql?
下一篇:在嵌套字典中列印值時出現問題
