小弟在写程式时常会用到如下程式
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维阵列中所有元素)
以上烦请大大们开示