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
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
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.
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!!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden