gpt4 book ai didi

c++ - 任意维数组

转载 作者:太空狗 更新时间:2023-10-29 23:51:53 32 4
gpt4 key购买 nike

所以我正在尝试创建一个 n 维数组结构用于迷宫生成程序。

我已经简化了我的问题(为了在将其模板化并添加所有必要的辅助函数之前尝试弄清楚理论)

所以我的问题目前归结为想要制作一个 ArbitraryArray 类,该类接受其构造函数的参数,指定维数。每个维度的长度 = 5。(目前)

这是我目前所拥有的:

class ArbitraryArray{
public:
int array[5];
ArbitraryArray*subArray;

ArbitraryArray(){}

ArbitraryArray(int depth){
if (depth == 2) subArray = new ArbitraryArray[5];
else if (depth > 2) for (int i = 0; i < 5; i++) subArray = new ArbitraryArray(depth - 1);
}
};

我会像这样创建一个二维对象:

ArbitraryArray testArray(2);

或者像这样的 3 维对象:

ArbitraryArray testArray(3);

问题是,当我测试它的深度 = 3 然后尝试设置一个整数值时,通过:

testArray.subArray[3].subArray[4].array[4] = 7;

我收到一个运行时错误,让我相信我在动态分配这些对象方面做错了什么。

此外,我包含了一个空的默认构造函数,因为它会被以下行调用:

subArray = new ArbitraryArray[5];

我知道这可能不是创建任意维数组数据结构的最佳方法,但我真的很想在可能寻找更好的方法之前弄清楚为什么这个实现不起作用。

我也知道我不应该有这样一行:

int array[5];

并且它应该是一个指针,这样就不会为底部维度以上的所有级别的数组分配大量浪费的内存。我打算在实现这个基本想法后将其修改为那个。

最佳答案

如何使用 std::vector 分配正确数量的空白内存,这将是

sizeof(T) * dim1 * dim2 * dim3 * ...

然后编写一个负责索引的辅助类,即,它将根据给定的 (x,y,z,...) 计算 i,无论你可能有很多维度。

恕我直言,这种方法的美妙之处在于不必摆弄指针,辅助类只需实现您喜欢的索引方案( row majorcolumn major )。

编辑

使用 std::valarray 时,事情可能会变得更容易,因为您可以使用 std::slice 和/或 std::gslice 为您计算索引。

关于c++ - 任意维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234778/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com