2016-05-05 220 views
1

我正在使用C++。
我有以下矩陣:矩陣向量C++

{1,2,3,4,5} 
{6,7,8,9,10} 
{11,12,13,14,15} 
{16,17,18,19,20} 
{21,22,23,24,25} 

,我想矩陣轉換爲5個vectros如下:

a[5] = {1,6,11,16,21}; 
b[5] = {2,7,12,17,22}; 
c[5] = {3,8,13,18,23}; 
d[5] = {4,9,14,19,24}; 
e[5] = {5,10,15,20,25}; 

我想每個矩陣列轉換爲向量。
我有一個需要5個載體,並將其轉換爲矩陣代碼:

typedef int *pInt; 
//Each element of arr is a int-type pointer 
pInt arr[5] = {a, b, c, d, e}; 

int matrix[5][5] = {0}; 
for(int i = 0; i < 5; ++i){ 
    for(int j = 0 ; j < 5; ++j){ 
     matrix[i][j] = arr[j][i]; 
    } 
} 

那麼我怎樣才能轉換矩陣向量?

+0

你是否有任何限制:你是否必須保持矩陣中的值完好無損,矩陣的大小是否會發生變化或者是否已修復,矩陣可能有多大,您是否嘗試優化某些事物(速度,記憶)等? – svs

回答

1

下面的代碼做這項工作:

int n=5; 
int** vec = new int*[n]; 
for(int j=0;j<n;j++){ 
    vec[j] = new int[n]; 
    for(int i=0;i<n;i++){ 
     vec[j][i] = matrix[i][j]; 
    } 
} 
for(int i=0;i<n;i++){ 
    cout<<"Vector: "<<i<<endl; 
    for(int j=0;j<n;j++){ 
     cout<<vec[i][j]<<" "; 
    } 
    cout<<endl; 
} 

你被int** vec = new int*[n]
這裏創建整數指針數組,VEC [J]將代表Ĵ矢量(array )並創建vec[j] = new int[n]

+0

嗨,我只是試過你的代碼,我認爲它不適合我 – Evyatar

+0

@Evyatar你得到的錯誤是什麼?我測試了代碼,它的工作方式與你在你的問題中描述的一樣。 –

1

如果我對你說得對。 對於每個我(行)你會填寫不同的數組。事情是這樣的:

for(int i = 0; i < 5; ++i) 
{ 
    for(int j = 0 ; j < 5; ++j) 
    { 
     if(i == 0) 
     { 
      //fill the first vector 
     } 
    } 
} 
+0

你想說如果(i == 0)正確嗎? – Evyatar

+0

是的。弄糊塗了。編輯 –

1

我知道你要求代碼從矩陣轉換爲向量,然後這些新的向量翻轉矩陣,但你可以一步完成整個過程。

int n = 5; 
int vec[n][n]; 
for(int i = 0; i < n; ++i) 
{ 
    for(int j = 0; j < n; ++j) 
    { 
     vec[i][j] = matrix[j][i]; 
    } 
} 

因爲你只是想行要在新的矩陣列,所有你需要做的就是換行和列迭代器(即矩陣的標準符號是矩陣[行] [列],所以上面的代碼迭代vec的第一行,因爲它也遍歷第二個矩陣的第一列,創建你想要的反演)

還要注意,儘管這些東西是數學中的矩陣和向量,但您正在使用的實際數據結構是數組和二維數組(或數組的陣列)。