如何在c ++中创建一个返回二维数组的函数

时间:2012-11-12 19:16:59

标签: c++ arrays multidimensional-array

我需要做这个功能。该参数假设为随机N*N数组。它应该返回一个(N-1)*(N-1)数组。我怎么能这样做?

int** SubMatrix(int** matrix){
    int** submatrix=new int*[size-1];
        ................................
        ................................
        return submatrix;
}

这段代码是否正确?

此外,在main函数中,我已经有了这个数组

x={{1,2,3},{1,2,3},{1,2,3}};

如何调用该功能?

通话:

int y[2][2]=SubMatrix[x]

错了,

int** y=SubMatrix[x] 

也错了......

1 个答案:

答案 0 :(得分:0)

首先,没有办法在C ++中跟踪数组的大小(仅分配的内存量)。因此,有必要将数组的size作为参数传递或者是全局的。我在以下声明中做出这个假设:

int* SubMatrix(int** matrix, int size){
    int* submatrix = new int[(size - 1) * (size - 1)];
    // Do stuff
    return submatrix;
}

其次,如果矩阵是正方形,最好使用上面描述的声明,其中分配的数组大小为(N-1)*(N-1)(参见Kevin 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;
}