导航具有列边界的数组
Navigating an Array with Column Boundaries
假设有一个 N x 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 的索引上,您怎么知道您可以向左移动而不更改行,但向右移动将前进到下一行?如何访问单元格相对于边缘的邻居?第 4 行中 9 的索引没有右邻。
我能想到如何做到这一点的唯一方法是当前索引,在这种情况下是
int index = row * num_cols + col
也许使用模量(指数 % 5 == 0)来确定是否处于边缘。但这并不能决定我们可以向左还是向右。
您的公式
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
时处于正确的边缘。
您可以使用
int row = index / N;
int col = index % N;
以获取行索引和列索引。例如,第 9 个条目的行索引为 9/5=1,列索引为 9%5=4。
计算(row, col)
坐标后,您可以确定它是具有左邻还是右邻域。col == 0
时,你没有左邻居;col == N-1
时,你没有合适的邻居。
相关文章:
- std::数组边界检查如何工作?
- 在哪种情况下,C++会在编译时进行数组边界检查?
- 分段错误发生在索引离开C++数组边界之后
- 使用 auto 时不检查数组边界
- 数组边界外的指针
- 为什么 gcc 即使请求也不抱怨数组边界?
- 将索引超出数组边界在 C++ 中的内核之前抛出异常或错误
- C++ - 最快的检查数组边界
- 使用硬件内存保护对64位硬件进行数组边界检查
- 比较器获取C++中数组边界之外的索引
- 在C++中使用映射而不是数组来保护在数组边界之外的搜索
- 警告:数组下标高于数组边界 [-Warray-bounds]
- c++中的动态分配不检查数组边界
- 如何在c++中管理数组边界
- STL push_back优化导致数组下标在数组边界之上
- 如何在模板中正确设置和传入数组边界(在c++中)
- Xcode是否可以防止c++数组边界运行时问题?
- 数组边界溢出
- 使用std::vector和.at()检查2D数组边界
- 我可以走到数组边界之外