Speicer für vector als Klassenmember reservieren
-
Hi
Habe folgendes Problem:
eine Klasse hält einen Vector, dieser soll zu Beginn (im C'tor?) mit ensprechender Grösse initialisiert werden.
Kenne das aber nur so, dass man bei Erstellung des vectors den C'tor nutzt.std::vector< int > m_vector( sizeof( datenstruktur ) );
Dadurch wird doch der speicher reserviert.
Ich kann das aber nicht in der Initialisierungsliste machen, weil da "datenstruktur" noch nicht bekannt ist.
Kann man den vector einfach mal anlegen und später in einer anderen Funktion den Platz mit dem Ausdruck "sizeof( datenstruktur )" reservieren?
Oder muss ich mit Zeigern und new arbeiten?Danke im Vorraus
-
Hallo,
das guten an den STL Containern ist, dass du dich nicht um den Speicher kümmern brauchst. Der Vector vergrößert sich automatisch
-
Jaja schon klar, aber genau das will ich verhindern aus Effizienz-Gründen.
S geht um nen Algorithmus der drüber läuft..
Der vector soll schon am Anfang genug Speicher bekommen.
Gibt es eine Funktion zum Reservieren oder muss ich mit pointer und new arbeiten?
-
-
reserve ist naheliegend
, sry dass ich da nicht selbst draufgekommen bin
Danke
-
Wobei du beachten mußt, daß reserve() zwar Speicher bereitlegt, aber die Größe des Vektors nicht verändert. Letzteres machst du mit resize().
-
Ist das Vergrössern denn auch Aufwendig?
Dann mach ich das auch ausserhalb der zeitkritischen Funktionen.
Muss ich vor resize() erst reserve() aufrufen, oder macht er das selbst?
-
Class iker schrieb:
Ist das Vergrössern denn auch Aufwendig?
Dann mach ich das auch ausserhalb der zeitkritischen Funktionen.
Muss ich vor resize() erst reserve() aufrufen, oder macht er das selbst?resize holt sich selbst den speicher den es braucht.
Er wollte auf etwas anderes hinweisen. Nämlich auf einen oft vorkommenden Fehler:
vector<int> foo; foo.reserve(10); for(int i = 0; i < 10; ++i) foo[i] = i; // Oopps!
Wenn man resize(10) benutzen würde wäre obiger Code i.O.
BR
Vinzenz
-
Danke
Und ich fragte mich schon, wo der vector acces out of range Assert herkam
Jetzt ist alles paletti..