在C++中定义一个不寻常的二维数组

Luk*_*uke 3 c++ arrays

我想使用枚举引用2维数组的第一维.但是,每个枚举值表示的配置有时会重叠(不是以任何图案化方式),这意味着数组中的数据有时会相同.因此,我希望有一些元素指向相同的数据数组,如下图所示.

异常阵列配置

有没有办法在C++的声明时间这样做?

das*_*ght 5

是的,您可以使用指针数组构建一个类似的数组; 您将能够引用该数组中的元素,就像它是常规的2D数组一样.这是一个例子:

enum MyEnum {
    enumFirst = 0
,   enumSecond = 1
,   enumSecondShared = 2
,   enumThird = 3
};

static int enumFirstData[] = {1, 2, 3};
static int enumSecondData[] = {4, 3, 2};
static int enumThirdData[] = {9, 7, 8};

int *enumData[] = {
    enumFirstData
,   enumSecondData
,   enumSecondData // <== Shared
,   enumSecondData
};
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样引用此数组的元素:

for (int i = 0 ; i != 3 ; i++) {
    cout << enumData[enumSecondShared][i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

由于您使用的是C++,因此使用std::vector或是std::array制作集合的首选方式.您可以使用与上面相同的技巧来建立共享集合元素.