首先,有没有办法来跟踪数组的大小在C++(只分配的内存量)。所以,数组的size
必须作为参数传递或是全局的。我做这样的假设在以下声明:
int* SubMatrix(int** matrix, int size){
int* submatrix = new int[(size - 1) * (size - 1)];
// Do stuff
return submatrix;
}
第二,如果你的矩阵是方形的,可能是更好的使用上面那些数组分配的大小是(N-1)*(N-1)
描述的声明(见凯文Loney的答案How do I declare a 2d array in C++ using new?关于矩阵堆上的声明);因此,该阵列可作为矩阵访问。访问单元将,但是,需要一个位算术的:
for (int i = 0; i < size - 1; ++i)
for (int j = 0; j < size - 1; ++j)
submatrix[i * (size -1) + j] // Element at [i][j]
最后,由该函数返回的数组现在是一个矩阵指针:
int* matrix = SubMatrix(matrix, size);
返回的矩阵的尺寸是(size-1)*(size-1)
关于你比如现在:
x = {{1,2,3},{1,2,3},{1,2,3}};
int* y = SubMatrix(matrix, 3);
// y is now a matrix of size (size-1)*(size-1)
如果你真的(真的)需要一个二维数组:
int** SubMatrix(int** matrix, int size){
int** submatrix = new int*[size - 1];
for (int i = 0; i < size - 1; ++i)
submatrix[i] = new int[size - 1]
// Do stuff
return submatrix;
}
是N已知常数,或者可以在运行时改变?换句话说,它是否必须处理任何大小的输入数组? – davec
你应该看看C++的基本语法。一个函数应该像'int ** y = SubMatrix(x)'调用一样。 – kosklain
函数签名是否固定?如果您可以更改该签名,则有更好的方法来执行此操作。 – Yakk