如何在c++中获得3d数组中的三维数组?


int array[3][3][8] = {
{{3, 4, 5}, {3, 5, 7}, {5, 6, 7}},
{{1, 3, 5}, {0, 1, 2, 3, 4, 5, 6, 7}, {1, 5, 7}},
{{1, 2, 3}, {1, 3, 7}, {0, 1, 7}}
};

用户输入x,y坐标和方向,在该位置只能在0-7方向移动。然而,每个位置只能朝着一定的方向移动。因此我做这个数组是为了看看这个方向是否在x, y坐标的数组中。在我得到三维数组(变成一维数组)之后,我将查看用户输入方向是否在该数组中。例如:

{3,4,5} at 1x1 // then check if direction is in this array

我试着:

int new_array[8] = array[1][1];

错误:数组必须用大括号初始化

int new_array = array[1][1][]; // {3,4,5}

Error: expected primary-expression before ']' token
所以我知道这个语法是无效的,还有其他方法来实现这样的操作吗?将三维数组复制到一个新的数组中。

您可以使用std::copy:

#include <algorithm>
#include <iterator>
//...
int new_array[8];
std::copy(std::begin(array[1][1]),
std::end(array[1][1]),
new_array);

使用std::array完成:

#include <array>
// ...
std::array<std::array<std::array<int, 8>, 3>, 3> array = {{
{{
{3,4,5},
{3,5,7},
{5,6,7}
}},
{{
{1,3,5},
{0,1,2,3,4,5,6,7},
{1,5,7}
}},
{{
{1,2,3},
{1,3,7},
{0,1,7}
}},
}};
std::array<int, 8> new_array = array[1][1];
// the same result but simpler:
auto new_array = array[1][1];

没有办法像那样获得数组的col或row…如果你定义了一个原始数组那么你需要导航单元格并赋值

int main() {
int test[2][3][2] = {
{
{1, 2},
{3, 4},
{5, 6}
}, 
{
{7, 8}, 
{9, 10}, 
{11, 12}
}
};
int z[2]; 
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
for (int k = 0; k < 2; ++k) {
z[k] = test[i][j][k];
}
}
}
for (int k = 0; k < 2; ++k)
{
cout << "z[" << k << "] = " << z[k] << endl;
}
return 0;

最新更新