使用列边界导航数组

时间:2013-10-07 01:38:28

标签: c++ arrays vector

假设存在N×N的正方形二维阵列,表示为一维阵列。让数组为5x5,如下所示,数组中的值不重要。

std::vector< int > array {
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9,
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9,
    0, 1, 2, 3, 4
};

如果我们说这个数组中有5行5列,那么如何检测它们是否在行的边缘?例如,如果你在第4行9的位置的索引上,你怎么知道你可以在不改变行的情况下离开,但是向右行将进入下一行? 如何根据边缘访问单元格的邻居? 9位于第4行的索引没有右邻居。

我能想到如何做到这一点的唯一方法是当前索引,在这种情况下是

int index = row * num_cols + col

并且可能使用模数(索引%5 == 0)来确定是否在边缘。但这并不能决定我们是向左还是向右。

2 个答案:

答案 0 :(得分:1)

您可以使用

int row = index / N;
int col = index % N;

获取行和列索引。例如,第9个条目的行索引9/5 = 1,列索引9%5 = 4。

计算了(row, col)坐标后,您可以确定它是否具有左邻居或右邻居。当col == 0时,你没有左邻居;当col == N-1时,你没有合适的邻居。

答案 1 :(得分:1)

你的公式

int index = row * num_cols + col;

上升或下降相当于添加/减去num_cols

是对的。相反的是

int row = index / num_cols;
int col = index % num_cols;

你知道(index % num_cols) == 0时你在左边缘。

你知道(index % num_cols) == num_cols-1时你处在右边缘。