Vectoren dynamisch erstellen
-
Hallo
Ich habe schon wieder ein Problem mit diesem dynamischen Zeugs.
Naja vielleicht könnt ihr mir ja wiedermal auf die Sprünge helfenKann man Vectoren auch dynamisch erstellen?
Ich versuche an jedes Element eines Vectors einem weiteren Vector anzuhängen.
(und später dann an den Vector noch mal einem, aber das ist jetzt erst mal egal)Hab's schonmal so versucht, aber geht nicht (hab ich mir schon gedacht)
std::vector<TTabSheet*> *SeitenVector[5];
Also was ich eigentlich machen will:
Ich möchte zur Laufzeit dynamisch nen Vector aus TPageControl Objekten erstellen.
Danach sollen an jedes TPageControl Objekt eine bestimmt Anzahl TTabSheet Objekte angehängt werden, welche wiederrum in einem Vector stehen sollen.std::vector<TPageControl*> MenuVector; void __fastcall TForm1::FormCreate(TObject *Sender) { for(int i=0; i<5; i++) { TPageControl *menu = new TPageControl(this); menu->Parent = this; menu->Top = i*100; MenuVector.push_back(menu); //hier müsste jetzt TTabSheet - Vector erstellt werden } }
is nur nen ganz kurzer, vereinfachter Ausschnitt
(Später soll dann nochmal an jedes TTabSheet Objekt ein Vector mit TImage Objekten, aber das sollte dann auch zu machen sein - hoffe ich
)
Schonmal Danke
-
Für die Tabscheets vielleicht so:
std::vector< std::vector<TTabSheet*> > SeitenVectoren;
oder wenn du schon mal mit einer map gearbeitet hast kannst du auch alles zusammen packen:
map<TPagesControl*,std::vector<TTabSheet*> > Pages;
Da hast du das Problem nicht, zu zwei unabhängigen Vectoren (Pages und Sheets) immer die richtige Zusammengehörigkeit zu garantieren.
-
Alles klar.
Das sieht gut aus.
Aber wie reserviere ich jetzt den Speicher für ein TTabSheet, wenn ich das so:std::vector< std::vector<TTabSheet*> > SeitenVectoren;
verkette. Das
TTabSheet *seite = new TTabSheet(MenuVector[menu_aktuell]); . . . SeitenVectoren[0].push_back(seite);
reicht da jetzt nicht mehr.
Da kommt immer nen Fehler.
-
Hallo gh
Bist du dir sicher, dass die Zeile
map<TPagesControl*,std::vector<TTabSheet*> > Pages;
so funktioniert?
Wenn ich die so einfüge, bekomme ich nen Fehler im Ausdruckssyntax.Glaube ich versuche das doch lieber mit Vectoren zu lösen. Davon habe ich zumindest mehr Ahnung als von map.
Allerdings hänge ich immer noch an dieser blöden Speicherreservierung.
Also wenn mir da noch jemand nen Tipp geben könnteFrohe Ostern
-
Mich würde mal interessieren, was das überhaupt soll. Schiesslich ist TPageControl::Pages doch schon ein dynamischer Container für TTabSheet-Objekte!?
Und wenn du den nicht benutzen willst dann gehört deine Frage eigentlich in's C++-Forum.
-
Ja Sorry, da hast du natürlich Recht. Und das funktioniert auch wunderbar.
Hab mich da wohl von der BCB-Hilfe irritieren lassen, bei der eine feste Anzahl von Pages erstellt wird und das wollte ich ja nicht.Vielen Dank
Trotzdem ergibt sich doch dasselbe Problem, wenn ich jetzt auf jeder der dynamisch erstellten Pages einen TImage - Vector erzeugen will.
Dann brauche ich doch auch eine dynamisch erstellte Anzahl von Vectoren, oder?
Und dann muss man das doch so machen wie oben beschrieben. Oder denke ich wieder falsch?
-
Helli schrieb:
Oder denke ich wieder falsch?
Irgendwie schon, habe ich den Eindruck.
Den vector erzeugst du doch nicht auf dem TabSheet, sondern erstmal "einfach so", das ist doch ein unabhängiges Konstrukt im Speicher.
Die TImages aus dem vector bekommst du auf das TabSheet, indem du dieses halt als Parent der Images angibst. Zwischen dem vector ansich und dem TabSheet gibt es keine Verknüpfung.Und auch mit einem
vector< vector<TTabSheet*> > SeitenVectoren;
verknüpfst du nichts sondern erzeugst einfach ein zweidimensionales Array aus TTabSheet-Objekten.
Ich komme einfach nicht dahinter, was du letztendlich eigentlich erreichen willst.
-
Naja letztendlich will ich auf jedem dynamisch erstellten TabSheet eine Reihe von TImages haben, wobei ich aber auf jedes TImage einzeln zugreifen möchte.
Dass der Vector unabhängig von TabSheet ist ist mir "eigentlich" klar
--ich stelle mir das nur immer so vor, da ich für jede Reihe (unbestimmte Anzahl) von Bildern auf dem TabSheet einen Vector brauche.ABER: Ein 2-dimensionaler Vector wäre doch da genau richtig. Dann könnte ich in jede Spalte die Bilder für ein bestimmtes TabSheet legen.
-
vector< vector<TImage*> > img_vector_XY; for (Anzahl der "Zeilen") { vector<TImage*> img_vector_X; for (Anzahl der "Spalten") { TImage *img = new TImage(this); // ... img_vector_X.push_back(img); } img_vector_XY.push_back(img_vector_X); }
-
Vielen vielen Dank!
Das ist genau das was ich wollte.
Wär ich selbst glaube nie drauf gekommenJetzt aber wirklich frohe Ostern