我不确定如何在C ++中执行此操作:
main()
{
float array[5][4];
transpose(array);
}
void transpose(float** array);
=&GT;我收到了一些编译错误:vector<KeypointMatch, std::allocator<KeypointMatch> >
如何将二维数组的变量传递给C ++中的方法?
提前致谢。
答案 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 ...
}