#include<iostream>
using namespace std;
void transpose(const int input[2][3], int (&output)[3][2]){
for(int i=0; i<2; ++i) {
for(int j=0; j<3 ; ++j) {
output [j][i] = input [i][j];
}
}
}
void printMultiArray(const int multi[2][3], const int len){
for (int row=0; row<2; row++){
for (int col=0; col<3; col++){
cout << multi[row][col] << " " ;
}
cout << endl;
}
}
int main(){
int multi[2][3] = {{1, 2, 3}, {7, 8, 9}};
int empty[3][2];
printMultiArray(multi, 6);
cout << "... space line ..." << endl;
transpose(multi, empty);
printMultiArray(empty, 6);
return 0;
}
我上面的代码TRANSPOSE(移调)2×3的阵列...但它不编译和失败:移调数组
6-3-transposeArray.cpp: In function ‘int main()’:
6-3-transposeArray.cpp:33: error: cannot convert ‘int (*)[2]’ to ‘const int (*)[3]’ for argument ‘1’ to ‘void printMultiArray(const int (*)[3], int)’
我不知道是什么问题,但。它似乎在抱怨转置()的第一个参数,但printMultiArray()似乎没有问题,以同样的方式传递数组。
其次是有更通用的方式来实现这一点? (例如通用FUNC可能采取的2x3,2x4的和2×5阵列,并返回各自的转置)
位一个基本的问题,但能够理解的任何帮助:)
你有没有使用'std :: vector>或类似的东西?另外最简单的转置方法是颠倒'(i,j)':http://stackoverflow.com/questions/16737298/what-is-the-fastest-way-to-transpose-a-matrix-in-c –
你真的,*真的*,***真的不想保存像这样的二阶张量。这是一个设计良好的类(可以使用'std :: vector'用于内部记忆目的)的工作。如果你还不了解课程,请阅读一本书。 – Zeta
是提升uBlas一个选项?看到这个[问题](http://stackoverflow.com/questions/4097153/how-to-transpose-matrix-using-ublas)。 – dwxw