Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche Hilfe bei code

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.08.2006, 18:46 Uhr
~Hui Buh
Gast


Hallo ich habe eine Matrix die in einem std::vector linear abgespeichert ist.
Nun möchte ich alle Zeilen der matrix löschen in denen eine Null vorkommt.
Also beispiel:
die matrix:
1 0 4
0 0 0
-2 1 2
0 3 2
0 0 0

das array sieht damit so aus: std::vector = 1 0 -2 0 0 0 0 1 3 0 4 0 2 2 0
ist also SPALTENWEISE gespeichert!

die ergebnismatrix sieht dann so aus:
1 0 4
-2 1 2
0 3 2

es wurden also zeile 1 und 4 gelöscht.
der vector sieht so aus: std::vector = 1 -2 0 0 1 3 4 2 2

Irgendwie stelle ich mich da dumm an.

Mein code der das schonmal schafft sieht so aus wobei ich glaub das er sehr ineffizient ist. Für Vorschläge bin ich sehr dankbar!!!



C++:
int offset = 0;
bool found = 0;
for(int row = 0; row < nbr_Matrix_rows; row++)
{  
     for(int col = 0; col < y_dim; col++)
     {
         offset = col + row * y_dim;
         if (tmp_Matrix[offset] != 0)
         {
             erg_Matrix.push_back(tmp_Matrix[offset]);
             continue;
         }
         for(int r = 0; r < nbr_Matrix_rows; r++)
             if(tmp_Matrix[col + r * y_dim] != 0.0)
                 found = 1;
         if(found)
              erg_Matrix.push_back(tmp_Matrix[offset]);
         found = 0;
     }
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2006, 08:33 Uhr
ao

(Operator)


Also, erst mal schreibst du "alle Zeilen löschen, in denen eine Null vorkommt". In dem Beispiel entfernst du aber die Zeilen, in denen nur Nullen vorkommen.

Dann: Ein Zeilenvektor (eindimensional) ist ein ungünstiger Datentyp, um eine Matrix (zweidimensional) zu bearbeiten. Du rechnest dir den Wolf mit Zeilen- und Spalten-Offsets. Warum nimmst du nicht vector<vector<int> >? Dann wirds einfacher.

Drittens: Die Aufgabe lässt sich sinnvoll zerlegen in zwei Teile: "Nullzeile finden" und "Eine Zeile entfernen". Du solltest daher zwei Routinen draus machen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: