首页 > 解决方案 > 如何在 C++ 中获取 3d 数组中的第 3 维数组?

问题描述

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 维数组(变成 1d 数组)后,我将查看用户输入方向是否在该数组中。例如:

 {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}

错误:']' 标记之前的预期主表达式
所以我知道这种语法无效,还有其他方法可以实现这种操作吗?将第三维数组复制到一个新数组中。

标签: c++multidimensional-array

解决方案


你可以使用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];

推荐阅读