#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