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

标签 c++ arrays

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

unusual array config

有没有办法在 C++ 中的声明时执行此操作?

最佳答案

是的,您可以使用指针数组构建这样的数组;您将能够像引用常规二维数组一样引用该数组中的元素。这是一个例子:

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

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

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

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

关于c++ - 在 C++ 中定义一个不寻常的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931882/

相关文章:

java - 如何在 Eclipse 调试器中显示数组长度?

c++ - 尽管根目录中有正确的 DLL,Windows 可执行文件仍无法启动

c++ - 以正确的方式使用 C/C++ 读取文件格式

c - 如何将数组的元素依次插入到另一个数组中?

计算数组的大小

arrays - 在 CL 的 dotimes 循环中使用 aref?

java - 如何使用简单的高斯分布算法将点分布在平面上?

c++ - 从 ant 运行 ndk-build

c# - 部署 .NET C++/CLI DLL 的先决条件?

arrays - 检索字典值并将它们附加到数组 Swift