将2d数组的实例分配给3d数组中的索引

时间:2019-03-03 16:24:49

标签: c++

我有一个2d和3d数组,声明如下:

unsigned char twoDArray[2][2];
unsigned char threeDArray[5][2][2];

我用所需的四个值填充了“ twoDArray”,现在我要将其放置在threeDArray的第一个位置:

threeDArray[0] = twoDArray;

我收到一条错误消息“无法分配给数组类型unsigned char [2] [2]”。除了循环遍历2d数组并将每个值一次放置到3d数组中的位置3DArray [0] [row] [col](其中row和col更改以访问每个元素)之外,还有什么方法可以进行此赋值在我的2d数组中)?

谢谢。

2 个答案:

答案 0 :(得分:0)

如果使用的是C ++ 11,则可以使用std::array<>代替支持通过operator=进行赋值的c样式数组。

std::array<std::array<unsigned char, 2>, 2> twoDArray{};

答案 1 :(得分:0)

对此的最佳解决方案实际上取决于是否可以使用C ++ 11。 如果您必须依赖C ++ 11之前的版本,则必须这样做,就像您在C中这样做一样: 使用memcpy将数组的内存复制到另一个内存中。这是容易出错的,因为它缺乏类型安全性,所以一个错误的数字和繁荣的未定义行为

使用C ++ 11,您可以使用std::array,它使一切变得更容易,更易读且更安全,我为您提供了两种方法的解决方案:

#include <cstring>
#include <array>

int main() {
    {
        unsigned char twoDArray[2][2];
        unsigned char threeDArray[5][2][2];
        std::memcpy(threeDArray[0], twoDArray, 2 * 2);

    }
    {
        using oneDArrayT = std::array<unsigned char, 2>;
        using twoDArrayT = std::array<oneDArrayT,2>;
        twoDArrayT twoDArray{};
        std::array<twoDArrayT,5> threeDArray{};
        threeDArray[0] = twoDArray;
    }

}