我有一个3D数组,我需要使用一个int在这个数组中找到一个int。
我的阵列:
int arrayOne[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};我需要能够使用单个int导航数组,如下所示:
int i = 4;
cout << arrayOne[4];这个会打印出5个。
这样做是可能的,还是另一种方式呢?
我开始用3D数组编写代码,如果不需要的话,我真的不想重写所有的东西。
我在谷歌上搜索过,没有找到解决方案。
发布于 2019-08-10 23:02:26
我需要能够使用单一的int来导航数组,比如:
int i = 4;,cout << arrayOne[4];,可以这样做
是的,是:
int arrayOne[3][3] {
{1,2,3},
{4,5,6},
{7,8,9},
};
int* array = arrayOne[0];
std::cout << array[4];发布于 2019-08-10 22:24:15
您可以将单个int封装在数组的大小(在选定的维度上):
arrayOne[i / 3][i % 3] // wrapping around the size of the inner arrays为了澄清这里发生的事情:
i = 0 => i/3 = 0, i%3 = 0i = 1 => i/3 = 0, i%3 = 1i = 2 => i/3 = 0, i%3 = 2i = 3 => i/3 = 1, i%3 = 0i = 4 => i/3 = 1, i%3 = 1i = 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)溢出之前,我可以使用3*3不同的值,这是完全合理的。
反向操作是将第一个坐标乘以3,然后添加第二个坐标:
(i/3) * 3 + (i%3) == i知道如何在两个“索引系统”之间切换,编写一个将2数组转换为一维数组的循环将是非常简单的。
我在这里发现( 2D !) 线圈的图片很有用,因为线圈是一条跨越2D区域的一维导线:

发布于 2019-08-10 22:27:39
用两个for循环迭代一个二维数组,一个嵌套在另一个循环中。实际上,您甚至不需要一个变量,您只需在每次迭代的索引中cout数字即可。如果要使用单个索引执行此操作,请将二维数组转换为一维数组。
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int singleArr [arr.length*arr[0].length];
int counter = 0;
for (int i = 0; i < sizeof(arr)/4; i++) {
for (int j = 0; j < sizeof(arr[0])/4; j++) {
singleArr[counter] = arr[i][j];
counter++;
}
}
std::cout<<singleArr[4];https://stackoverflow.com/questions/57446071
复制相似问题