所以我正在尝试创建一个用于迷宫生成程序的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);
}
};
Run Code Online (Sandbox Code Playgroud)
我会像这样创建一个二维对象:
ArbitraryArray testArray(2);
Run Code Online (Sandbox Code Playgroud)
或者像这样的三维物体:
ArbitraryArray testArray(3);
Run Code Online (Sandbox Code Playgroud)
问题是,当我测试深度= 3然后尝试设置整数值时,通过:
testArray.subArray[3].subArray[4].array[4] = 7;
Run Code Online (Sandbox Code Playgroud)
我收到了一个运行时错误,让我相信我在动态分配这些对象方面做错了.
此外,我包含一个空的默认构造函数,因为它被以下行调用:
subArray = new ArbitraryArray[5];
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是创建任意维数组数据结构的最佳方法,但我真的想弄清楚为什么这个实现在寻找更好的方法之前不起作用.
另外我知道我不应该像以下一样:
int array[5];
Run Code Online (Sandbox Code Playgroud)
并且它应该是一个指针,以便在底部维度之上的阵列的所有级别上没有大量浪费的内存分配.在我得到这个基本想法之后,我打算将其修改为.
向量大小是动态的,所以为什么这会给出一个seg错误:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<int> vectorOfInts;
vectorOfInts[0] = 3;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试实际做的是在类中声明一个向量.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Directory{
public:
string name;
int maxIndex;
vector<Directory> subDirectories;
void addSubdirectory(string x){
Directory newSubdirectory(x);
subDirectories[maxIndex++] = newSubdirectory;
}
Directory(string x){
name = x;
maxIndex = 0;
}
};
int main(){
Directory root("root");
root.addSubdirectory("games");
}
Run Code Online (Sandbox Code Playgroud)
但这也给出了一个段错误.