如何在C++中创建二维数组的数组

How to create an array of two dimensional arrays in C++

本文关键字:二维数组 数组 创建 C++      更新时间:2023-10-16

>假设我有一堆 bool[4][4] 类型的二维数组,如下所示:

class A
{
public:
    static const int SIZE = 4;
    static constexpr bool blocks_S[SIZE][SIZE]={    {0,1,1,0},
                                                    {1,1,0,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};
    static constexpr bool blocks_SR[SIZE][SIZE] = { {1,1,0,0},
                                                    {0,1,1,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};
    static constexpr bool blocks_L[SIZE][SIZE] = {  {0,0,1,0},
                                                    {1,1,1,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};
    static constexpr bool blocks_LR[SIZE][SIZE] =  {{1,1,1,0},
                                                    {0,0,1,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};
    static constexpr bool blocks_Box[SIZE][SIZE] = {{1,1,0,0},
                                                    {1,1,0,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};
    static constexpr bool blocks_Bar[SIZE][SIZE] = {{1,1,1,1},
                                                    {0,0,0,0},
                                                    {0,0,0,0},
                                                    {0,0,0,0}};  
};

我想制作一个名为 block_types 的数组,其中包含对所有这些二维数组的引用,因此我可以例如执行以下操作: block_types[0] 并接收: blocks_S . 我怎样才能构造这样的数组(不使用std::vector等(,block_types的类型应该是什么?我尝试了auto,它选择了错误的类型。

auto block_types = { A::blocks_S, A::blocks_SR,
                     A::blocks_L, A::blocks_LR,
                     A::blocks_Box, A::blocks_Bar};
数组

的初始值设定项必须是元素值的支撑列表 - 这是递归的。 初始值设定项不能是另一个数组。换句话说,不可能通过提供一个本身就是数组的初始值设定项来初始化数组的多个元素。

如果你需要两个具有相同内容的单独数组,你必须给它们相同的初始值设定项:例如,通过写出两次,或使用#define宏,或者通过 constexpr 函数生成初始值设定项。


为了满足您的要求:

例如,我可以做:block_types[0]并接收:blocks_S

你不需要创建另一个数组;你可以使用一个指针数组:

using row_t = const bool[A::size];
row_t *block_types[] = { A::blocks_S, A::blocks_SR,
                 A::blocks_L, A::blocks_LR,
                 A::blocks_Box, A::blocks_Bar};

之后,block_types[0]可以类似于A::blocks_S使用。