gpt4 book ai didi

c++ - 有效处理 OOB,二维数组访问

转载 作者:行者123 更新时间:2023-11-30 04:28:57 25 4
gpt4 key购买 nike

假设您正在尝试以棋盘模式访问数组:

  0 1 2 3 4 5 6 70 o • o • o • o •1 • o • o • o • o2 o • o • o • o •3 • o • o • o • o4 o • o • o • o •5 • o • o • o • o6 o • o • o • o •7 • o • o • o • o

So, say you're visiting the black elements here, and adding in all 4 white neighbours.

You can't do this at the edges or corners, because there are only 3 and 2 white neighbours there respectively. So you'd end up adding all 3 whites on the edges and 0 for out of bounds accesses.

The inefficient way to do this is to do something like

at each element
if element to the right is not out of bounds ...

但我不想做这样的检查。

所以我所做的就是将循环切成条状,所以:

at each element ON LEFT EDGE
add 3 elements i know are in bounds (right, up, down)

然后是角落的特例

at top left corner..
add 2 elements i know are in bounds (right, down)

所以这最终得到一段非常长的有效代码,但没有约束检查。不过,我正在寻找一种方法来减少代码块的长度,并使其更易于维护。

有什么技巧吗?

最佳答案

一种可能的解决方案是填充您的数据。即,添加具有一些中性值的边界。我在下面用 x-es 对此进行了说明。

    0 1 2 3 4 5 6 7  x x x x x x x x x x0 x o • o • o • o • x1 x • o • o • o • o x2 x o • o • o • o • x3 x • o • o • o • o x4 x o • o • o • o • x5 x • o • o • o • o x6 x o • o • o • o • x7 x • o • o • o • o x  x x x x x x x x x x

边界的实际“厚度”显然取决于您寻找每个元素的距离(您的窗口/内核宽度/高度)。在查看直接邻居的情况下,只需要大小为 1 的边界。

是的,这确实意味着您将处理更多的数据。但优点是,尽管您必须注意寻址,但角/边界情况不再需要任何特殊检查。

关于c++ - 有效处理 OOB,二维数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9729506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com