小弟在寫程式時常會用到如下程式
for (int rows = 0; rows < arrayHeight; ++rows)
{
for (int cols = 0; cols < arrayWidth; ++cols)
{
// do something
}
}
利用兩個迴圈來處理二維陣列的所有元素
但有時在處理某個元素時
會需要該元素周圍的元素來計算
就會變成下面的情況
for (int rows = 0; rows < arrayHeight; ++rows)
{
for (int cols = 0; cols < arrayWidth; ++cols)
{
for (int rows2 = rows - 1; rows2 < rows + 2; ++rows2)
{
for (int col2 = col - 1; col2 < col + 2; ++col2)
{
// 邊界判定
// do something
}
}
//dosomething
}
}
在這個情況下層數就會變得很多
使用function或許是其中一種方式,如
for (int rows = 0; rows < arrayHeight; ++rows)
{
for (int cols = 0; cols < arrayWidth; ++cols)
{
function1();
//do something
}
}
後來我想我明明只是要遍歷所有元素
為何不能只寫一個for就處理完
於是試著用define的寫法來處理
#define RANGE(VALUE, BEGIN, END) \
int VALUE = BEGIN; VALUE < END; ++VALUE
#define FOR_2D(CONDITION_1, CONDITION_2) \
for (CONDITION_1) \
for (CONDITION_2)
於是我就能使用
FOR_2D(RANGE(rows, 0, arrayHeight), RANGE(cols, 0, arrayWidth))
{
// do something
}
來處理
對於上面需要再取某元素周圍元素的計算也能用
FOR_2D(RANGE(rows, 0, arrayHeight), RANGE(cols, 0, arrayWidth))
{
FOR_2D(RANGE(row2, rows - 1, rows + 2), RANGE(col2, cols - 1, cols + 2))
{
//邊界判定
//do something
}
// do something
}
我想討論的問題如下
1.使用define的這種寫法到底好還是不好 (或者該說優點跟缺點是?)
2.是否還有其它更好的方式可以處理這種雙迴圈的問題(就是要遍歷2維陣列中所有元素)
以上煩請大大們開示