首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c++中创建返回二维数组的函数

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

Stack Overflow用户
提问于 2012-11-13 03:16:59
回答 1查看 199关注 0票数 0

我需要创建这个函数。假设参数是一个随机的N*N数组。它应该返回一个(N-1)*(N-1)数组。我该怎么做呢?

代码语言:javascript
复制
int** SubMatrix(int** matrix){
    int** submatrix=new int*[size-1];
        ................................
        ................................
        return submatrix;
}

这段代码正确吗?

除此之外,比如说在main函数中,我已经有了这个数组

代码语言:javascript
复制
x={{1,2,3},{1,2,3},{1,2,3}};

如何调用该函数?

呼叫:

代码语言:javascript
复制
int y[2][2]=SubMatrix[x]

是错误的

代码语言:javascript
复制
int** y=SubMatrix[x] 

也是错误的..。

EN

回答 1

Stack Overflow用户

发布于 2012-11-13 03:49:51

首先,在C++中无法跟踪数组的大小(只跟踪分配的内存量)。因此,有必要将数组的size作为参数传递或全局传递。我在下面的声明中做了这样的假设:

代码语言:javascript
复制
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? );因此,该数组可以作为矩阵访问。然而,访问单元格需要一些算术运算:

代码语言:javascript
复制
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]

最后,函数返回的数组现在是一个矩阵指针:

代码语言:javascript
复制
int* matrix = SubMatrix(matrix, size);

返回的矩阵的维数为(size-1)*(size-1)

关于你现在的例子:

代码语言:javascript
复制
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)

如果你真的(真的)想要一个二维数组:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13350021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档