[討論] 2維陣列 使用迴圈的方式
小弟在寫程式時常會用到如下程式
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維陣列中所有元素)
以上煩請大大們開示
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.184.17.80
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1417350091.A.B68.html
→
11/30 20:45, , 1F
11/30 20:45, 1F
→
11/30 20:46, , 2F
11/30 20:46, 2F
→
11/30 22:05, , 3F
11/30 22:05, 3F
→
11/30 22:09, , 4F
11/30 22:09, 4F
推
11/30 22:09, , 5F
11/30 22:09, 5F
→
11/30 22:10, , 6F
11/30 22:10, 6F
→
11/30 22:11, , 7F
11/30 22:11, 7F
→
11/30 22:17, , 8F
11/30 22:17, 8F
→
11/30 22:46, , 9F
11/30 22:46, 9F
→
11/30 22:47, , 10F
11/30 22:47, 10F
→
11/30 22:47, , 11F
11/30 22:47, 11F
推
11/30 23:43, , 12F
11/30 23:43, 12F
→
11/30 23:44, , 13F
11/30 23:44, 13F
推
11/30 23:48, , 14F
11/30 23:48, 14F
→
11/30 23:48, , 15F
11/30 23:48, 15F
→
11/30 23:51, , 16F
11/30 23:51, 16F
→
11/30 23:53, , 17F
11/30 23:53, 17F
→
11/30 23:53, , 18F
11/30 23:53, 18F
推
12/01 03:55, , 19F
12/01 03:55, 19F
→
12/01 03:57, , 20F
12/01 03:57, 20F
→
12/01 03:57, , 21F
12/01 03:57, 21F
→
12/01 10:58, , 22F
12/01 10:58, 22F
推
12/01 14:01, , 23F
12/01 14:01, 23F
→
12/01 14:15, , 24F
12/01 14:15, 24F
→
12/01 14:15, , 25F
12/01 14:15, 25F
→
12/01 14:16, , 26F
12/01 14:16, 26F
→
12/01 14:16, , 27F
12/01 14:16, 27F
→
12/01 14:17, , 28F
12/01 14:17, 28F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
討論
5
28