如果你阅读或修改汇总表中的位置,那将是有问题的,但你将修改矩阵本身。 例如,你需要创建另一个矩阵。
EDITED:我转而使用独一无二的交换机,因为有意见(尽管我并不认为,OP确实准备就绪/对此感兴趣)。
EDITED 我知道,你可以将矩阵“内部”。 然而,这并不是被占领土上的问题。 感谢所有评论家。
<代码>std:unique_ptr<> 是你管理点的舱位,确保点名器在使用后自动删除。 一种选择是auto_ptr
。 不幸的是,它不支持阵列的病媒。 www.un.org/Depts/DGACM/index_spanish.htm 虽然这是新的标准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];
这是一种 st子的矩阵,你不能期望对点人本身加以修改,这是没有意义的。 更好:
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 ...
}