Dynamically allocating a two-dimensional array
本问题已经有最佳答案,请猛点这里访问。
0
1 2 3 4 5 6 7 8 9 10 | void fillTestCase (int * tC) { ifstream infile; infile.open("input00.txt",ifstream::in); int * tempGrid; int i,j; infile >>i; infile >>j; tempGrid = new int[i][j]; } |
给我一个错误:
1 2 | error C2540: non-constant expression as array bound error C2440: '=' : cannot convert from 'int (*)[1]' to 'int *' |
如何使这两个维度的数组成为动态的?
到目前为止,最好的方法是使用Boost多维数组库。
他们的三维数组示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | int main () { // Create a 3D array typedef boost::multi_array<double, 3> array_type; typedef array_type::index index; for ( int x = 3; x < 5; ++x ) { int y = 4, z = 2; array_type A(boost::extents[x][y][z]); // Assign values to the elements int values = 0; for(index i = 0; i != x; ++i) for(index j = 0; j != y; ++j) for(index k = 0; k != z; ++k) A[i][j][k] = values++; // Verify values int verify = 0; for(index i = 0; i != x; ++i) for(index j = 0; j != y; ++j) for(index k = 0; k != z; ++k) assert(A[i][j][k] == verify++); } return 0; } |
最简单的方法是将数组设为一维,并自己计算索引。
Pseudocode:
1 2 3 4 5 6 7 8 9 10 | int MaxWidth; int MaxHeight; int* Array; Array=new int[MaxWidth*MaxHeight]; int Column, Row; ... Element=Array[Row*MaxWidth+Column]; |