nova Geschrieben 26. April 2002 Geschrieben 26. April 2002 hallo liebe leute ich sollte ein programm schreiben, welches die optimale güterzuordnung eines "rucksacks" mit bestimmter kapazität berechnet. nun sollte ich dabei eine 2d matrix benutzen, und da fangen auch schon die probleme an :confused: ein klassentemplate für die matrix ist vorhanden. das wär der konstruktor für die matrix: template <typename T> matrix<T>::matrix(int numRows, int numCols, const T& initVal): nRows(numRows), nCols(numCols), mat(numRows, vector<T>(numCols,initVal)) {} nehmen wir an ich deklariere folgendes: matrix<int>* tableau sollte man dann dieses tableau nicht, z.B. in einer Schleife, dynamisch erweitern können? So irgendwie: tableau[i-1][j-1].push_back(0) bitte helft mir weiter, bevor ich noch verzweifle.... :WD herzlichen dank!!!!! nova Zitieren
DocJunioR Geschrieben 26. April 2002 Geschrieben 26. April 2002 kannst du nicht. Allerdings kannst du den Speicher dynamisch allozieren. quasi: char *Tableau = malloc (15 * 15 ); Beim Vergrößern der Table musst du eine Hilfsvariable erstellen: char *Hilfs = malloc(20 * 20); denn musst du das alles rüber kopieren: for (i = 0; i < XAlt; i++) for (a=0; a < YAlt; a++) Hilfs[a * XNeu + i] = Tableau[a * XAlt + i]; Dann wird einfach die alte Table gelöscht und die neue auf die Variable verschoben: release (Tableau); Tableau = Hilfs; fertig.. du Greifst auf das einzelne Element so zu: Stell dir vor, du hast 5 * 6 Elemente. Im Speicher liegen sie sequenziell vor. um also in die nächste Zeile zu kommen, musst du einfach nur um die Anzahl der Elemente pro Zeile weiter gehen: [Z1E1][Z1E2][Z1E3][Z1E4][Z1E5][Z1E6][Z2E1]... Daraus Ergibt sich fie Form: Element X=3, y=2 Index = Y * XElemente + X; ist doch nicht so schwer, oder? CyA DjR Zitieren
Klotzkopp Geschrieben 27. April 2002 Geschrieben 27. April 2002 @DocJunior: Hast Du nicht mitbekommen, dass Nova eine Template-Klasse benutzt? Und was soll "release" sein? @Nova: Solange Du tableau als Zeiger deklarierst, musst Du (*tableau)[][] schreiben. Ich hoffe, Du hast Speicher für die Matrix geholt. Du kannst die Matrix nicht erweitern, indem Du einzelne Elemente hinzufügst. Du kannst nur um ganze Spalten oder Zeilen erweitern. Um eine Spalte hinzuzufügen, musst Du mat einen weiteren Zeilenvektor hinzufügen, für einen neue Spalte musst Du jedem Zeilenvektor ein neues Element hinzufügen. Zitieren
nova Geschrieben 27. April 2002 Autor Geschrieben 27. April 2002 thanx klotzkopp dein tipp hat mir weitergeholfen, hab das nicht gerafft, dass das eine element ja ein vektor war und man daher nicht elementweise einfügen konnte!! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.