2016-05-05 12 views
1

Ich benutze C++.
Ich habe die folgende Matrix:Matrix zu Vektoren 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} 

und ich möchte die Matrix 5 vectros wie folgt konvertieren:

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}; 

ich jede Matrixspalte zu Vektor konvertieren möchten.
ich den Code haben, der 5 Vektoren nimmt und es zu Matrix konvertieren:

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]; 
    } 
} 

So wie kann ich die Matrix in Vektoren umwandeln?

+0

haben Sie irgendwelche Einschränkungen wie: müssen Sie Werte in der Matrix intakt halten, kann die Größe der Matrix variieren oder ist es fest, wie groß die Matrix sein könnte, versuchen Sie, für etwas zu optimieren (Geschwindigkeit, Speicher) usw.? – svs

Antwort

1

folgenden Code macht den Job:

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; 
} 

Sie erstellen Array von Integer-Zeiger von int** vec = new int*[n]
Hier vec [j] wird j th Vektor darstellen (array) und erstellt von vec[j] = new int[n]

+0

Hallo, ich habe gerade versucht, Ihren Code und ich denke, es hat nicht funktioniert für mich – Evyatar

+0

@Evyatar Was ist der Fehler, den Sie bekommen? Ich habe den Code getestet, er funktioniert so, wie Sie es in Ihrer Frage beschrieben haben. –

1

Wenn ich dich richtig verstanden habe. Für jedes i (Zeile) füllen Sie ein anderes Array. Etwas wie folgt aus:

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

Sie möchten sagen, ob (i == 0) richtig? – Evyatar

+0

Ja. Bekam verwirrt. Bearbeitet –

1

Ich weiß, dass Sie Code für die Konvertierung von einer Matrix zu Vektoren und dann fragen diese neuen Vektoren zu einer umgedrehten Matrix, aber Sie können den gesamten Prozess in einem Schritt tun.

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]; 
    } 
} 

Weil Sie gerade Reihen wollen Spalt in der neuen Matrix sein, alles, was Sie zu tun haben, Swap ist der Zeilen- und Spalten Iteratoren (dh Standardnotation einer Matrix ist Matrix [Zeile] [Spalte], so dass die Der obige Code iteriert durch die erste Zeile des Vecs, da er auch durch die erste Spalte der zweiten Matrix iteriert und die gewünschte Inversion erzeugt.)

Beachten Sie auch, dass obwohl diese Dinge Matrizen und Vektoren in Mathematik sind, die tatsächlichen Datenstrukturen, mit denen Sie arbeiten Arrays und 2-D-Arrays (oder Arrays von Arrays).

Verwandte Themen