我有一个 3D 数组,我需要使用单个 int 在该数组中查找 int。
我的阵列:
int arrayOne[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
Run Code Online (Sandbox Code Playgroud)
我需要能够使用单个 int 来导航数组,例如:
int i = 4;
cout << arrayOne[4];
Run Code Online (Sandbox Code Playgroud)
这将打印出 5。
是否可以这样做或者是否有其他方法可以做到这一点?
我开始使用 3D 数组进行编码,如果不需要的话,我真的不想重写所有内容。
我用谷歌搜索了一下,没有找到解决方案。
您可以将单个 int 包裹在数组的大小周围(在选定的维度上):
arrayOne[i / 3][i % 3] // wrapping around the size of the inner arrays
Run Code Online (Sandbox Code Playgroud)
为了澄清这里发生了什么:
i = 0 => i/3 = 0, i%3 = 0 i = 1 => i/3 = 0, i%3 = 1 i = 2 => i/3 = 0, i%3 = 2 i = 3 => i/3 = 1, i%3 = 0 i = 4 => i/3 = 1, i%3 = 1 i = 5 => i/3 = 1, i%3 = 2i = 6 => i/3 = 2, i%3 = 0i = 7 => i/3 = 2, i%3 = 1i = 8 => i/3 = 2, i%3 = 2您可以看到,在 (i/3) 或 (i%3) 溢出之前,i 可以取 3*3 个不同的值,这是完全有道理的。
相反的操作是将第一个坐标乘以 3,然后加上第二个坐标:
(i/3) * 3 + (i%3) == i
Run Code Online (Sandbox Code Playgroud)
知道如何在两个“索引系统”之间切换,编写一个将 2 维数组转换为一维数组的循环对您来说将是微不足道的。
我发现(2D!) 线圈的图片在这里很有用,因为线圈是跨越 2D 区域的 1D 导线:

编辑:一定要查看Andreas DM 的答案!
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |