不是C++: multidimensional array initialization in constructor的副本,因为所有的答案都出现,以假设在编译时已知边界。
我制作了一个加权无向图表类arraygraph
,由int
的二维数组支持,名称为edges[][]
。在实例化时,我并不关心edges[][]
持有什么; arraygraph
有一个方法可以从给定的文件名中读取图表,edges
被设置为new int[n][n]
(其中n
是文件中的节点数)在填充它之前。
麻烦的是,g ++似乎并不喜欢我定义edges[][]
的方式。它希望为数组设置边界,并且在编译时我不知道边界。我应该将edges
重新定义为int *
吗?还是edges[][0]
?或完全不同的东西?
我无论如何都不是C ++专家(我是蟒蛇人),如Array with undefined size as Class-member中那些复杂,重量级的选项有点超出范围(当然有'比 ...更简单的方法。如果我试图做的事情完全是错误的,那么知道也是一件有用的事情,并且知道我应该做什么也很方便。
答案 0 :(得分:1)
C ++并不知道变长数组。因此,您需要使用常量大小定义数组。重新定义阵列是不可能的。
多维数组的两个选项:
int **edges
vector<vector<int>> edges;
向量非常方便。所以我建议第二个选项:
int N=10; // dynamic!
vector<vector<int>> m(N, vector<int>(N));
使用指针的替代方法是:
int N=10; // dynamic!
int**m = new int*[N]; // allocate the first array
for (int i = 0; i < N; i++) { // allocate the second arrays
m[i] = new int[N]{};
}
在这两种情况下,您都可以使用相同的语法访问数据:
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cout << m[i][j] << "\t";
cout << endl;
}
答案 1 :(得分:0)
看来你正在寻找一种动态大小的数组。尝试使用std::vector
而不是数组。