vektor
-
Ich möchte einen Vektor der länge l erstellen, dessen Werte aber noch nicht initialisiert werden sollen:
Kann ich das so machen:vector<Net> netlist(l);
-
Das, was du das hast ist das gleiche, wie:
vector<Net> netlist(l,Net());Also werden die Objekte initialisiert.
Objekte werden immer initialisiert. Respektive ein Konstruktor wird immer aufgerufen. Alleine was der macht spielt eine Rolle und das kannst du ja selbst definieren.
-
Nein. Die Werte werden immer initialisiert. Wozu soll das überhaupt gut sein? Suchst du vielleicht reserve?
-
Ich werds noch einmal genauer erklären:
Die Anzahl der Vektorelemente ist bekannt, aber noch keine Werte dafür.
Kann ich das dann so machen wie oben, oder soll ich zuerst Speicherplatz reservieren (eben genausoviel wie ich brauche) und erst wenn ich die
Werte ermittelt habe die Elemente hinzufügen?
-
Du kannst die Werte einfügen sobald du sie jeweils hast. Dafür gibt es ja vector::push_back.

-
Du suchst reserve().
http://www.cplusplus.com/reference/stl/vector/reserve/
Aber der vector reagiert eh dynamisch auf deine Elemente. heißt er vergrößert sich automatisch.
-
einsteiger112 schrieb:
Kann ich das dann so machen wie oben, oder soll ich zuerst Speicherplatz reservieren (eben genausoviel wie ich brauche) und erst wenn ich die
Werte ermittelt habe die Elemente hinzufügen?Du kannst entweder Speicherplatz reservieren (mit reserve()), und die Elemente dann erst später hinzufügen.
Oder du kannst die Elemente gleich erzeugen, und dann nachträglich überschreiben. Dabei werden sie allerdings mit dem Default-Constructor initialisiert, und dann nachträglich mit dem Assignment-Operator überschrieben.
Vermutlich ist meistens die reserve() Variante die sinnvollere.
BTW: da ich "erstellen" im Zusammenhang mit C++ als Synonym für konstruieren/initialisieren verstehe, ist "erstellen ohne initialisieren" ein Widerspruch in sich.
-
Ich hab nun mit "reserve" genug Speicherplatz reserviert.
Bei dem Vektor handelt es sich nun aber um ein Vektor einer Klasse.
Nun werden nacheinander gewisse Eigenschaften der Klasse (z.B string objectname) eingelesen.
Wie kann ich die nun zu dem Vektorelement hinzufügen.
(mit push_back hat das irgendwie nicht funktioniert)[code]netlist.netname.push_back();[code]
-
Net net(.....); netlist.push_back(net);netlist.push_back(Net(.....));
-
Danke jetzt hab ichs glaub kapiert

-
einsteiger112 schrieb:
hat das irgendwie nicht funktioniert
sagt irgendwie nichts darüber was du gemacht hast und noch weniger was schief gelaufen ist und erst recht nicht warum...
(siehe auch Link in meiner Signatur)