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

时间:2011-11-15 16:13:32

标签: c++

  

可能重复:
  How do I use arrays in C++?

我不确定如何在C ++中执行此操作:

main()
{
   float array[5][4];   

   transpose(array); 
}

void transpose(float** array);

=&GT;我收到了一些编译错误:vector<KeypointMatch, std::allocator<KeypointMatch> >

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

提前致谢。

1 个答案:

答案 0 :(得分:-1)

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

编辑:我已经修改了这个以使用unique_ptr,因为这些评论(虽然我不认为OP真的准备好/对此感兴趣)。

EDITED我知道你可以“就地”转置矩阵。然而,这不是OP的问题。感谢所有关于此的评论者。

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

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

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 ...
}