将二维数组传递给方法C++

pass two dimensional array to a method C++

本文关键字:方法 C++ 二维数组      更新时间:2023-10-16

可能重复:
如何在C++中使用数组?

我不确定如何在C++中做到这一点:

main()
{
   float array[5][4];   
   transpose(array); 
}
void transpose(float** array);

=>我遇到了一些编译错误:vector<KeypointMatch, std::allocator<KeypointMatch> >

如何将二维数组的变量传递给C++中的方法?

提前谢谢。

如果你要读取或修改矩阵的位置,那没关系,但你要修改矩阵本身。在您的示例中,您需要创建另一个矩阵。

编辑:由于有评论,我已经将其修改为使用unique_ptr(尽管我认为OP还没有真正准备好/对此感兴趣(。

编辑:我知道你可以把矩阵"原地"转置。然而,这不是OP的问题。感谢所有对此发表评论的人。

std::unique_ptr<>是一个类,用于管理指针,确保指针在使用后自动删除。选项为auto_ptr。不幸的是,它不支持数组的向量。unique_ptr确实支持它们,尽管它是新标准c++-0x的一部分。

因此,您需要将转置的形式参数修改为:

void transpose(std::unique_ptr<float**> &array, int rows, int columns)
{
    std::unique_ptr<float **> aux = array;
    array.reset( new float[columns][rows] );
    // now transpose aux into array
}

这也意味着你不能像以前那样创建原始数组:

float array[5][4];

这是堆栈上的一个矩阵,不能期望修改指针本身,这没有意义。如果你这样做更好:

int main()
{
    std::unique_ptr<float **>array( new float[5][4] );
    transpose( array, 5, 4 );
    // ... use array ...
}

也就是说,另一种解决方案是稍微更改转置过程的签名,并使其成为一个函数。

std::unique_ptr<float **> transpose(float** array, int rows, int columns)
{
    std::unique_ptr<float **> toret( new float[columns][rows] );
    // now transpose array into toret
    // end
    return toret;
}

并且您不需要更改程序中的任何其他内容。

int main()
{
    float array[5][4];
    std::unique_ptr<float **> transposed( transpose( array, 5, 4 ) );
    // ... more things ...
}