将二维数组传递给方法C++
pass two dimensional array to a method C++
可能重复:
如何在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 ...
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法