Ich habe eine vector<CustomClass*>
und ich habe viele Elemente in den Vektor eingefügt und ich benötige einen schnellen Zugriff, daher verwende ich keine Liste. Wie stelle ich die Anfangsgröße des Vektors ein (z. B. 20.000 Stellen, um das Kopieren beim Einfügen eines neuen zu vermeiden)?
130
std::vector
Referenz, je nachdem, welche Ihren Anforderungen besser entspricht.std::vector
im Titel?Antworten:
oder:
Ersteres legt die tatsächliche Größe des Arrays fest, dh es wird zu einem Vektor von 20000 Zeigern. Letzteres lässt den Vektor leer, reserviert jedoch Platz für 20000 Zeiger, sodass Sie (bis zu) so viele einfügen können, ohne dass er neu zugewiesen werden muss.
Zumindest meiner Erfahrung nach ist es ziemlich ungewöhnlich, dass beide einen großen Unterschied in der Leistung bewirken - aber beide können unter bestimmten Umständen die Korrektheit beeinträchtigen. Insbesondere solange keine Neuzuweisung stattfindet, bleiben Iteratoren in den Vektor garantiert gültig, und sobald Sie die Größe / den reservierten Speicherplatz festgelegt haben, werden Sie garantiert keine Neuzuweisungen mehr erhalten, solange Sie dies nicht tun. t Vergrößern Sie darüber hinaus.
quelle
whatever[10000] = somepointer;
, bei letzteren müssen Sie zupush_back
jedem Zeiger, den Sie hinzufügen. Zumindest wenn Sie daran gewöhnt sind,vector
ist letzteres wahrscheinlich einfacher und natürlicher.reserve
, der die Speichergröße vorab zuweist . Theoretisch könnte das Einstellen der Größe immer noch geringfügig schneller sein, da auch vermieden wird, dass die aktuelle Größe jedes Mal erhöht wird, wenn Sie ein Element hinzufügen. In Wirklichkeit bezweifle ich, dass Sie das messen können.Sie müssen die Reservefunktion verwenden, um eine anfänglich zugewiesene Größe festzulegen, oder dies im anfänglichen Konstruktor tun.
oder
Wenn Sie
reserve()
Elemente verwenden,vector
wird genügend Speicherplatz für (mindestens?) So viele Elemente zugewiesen. Die Elemente sind in der nicht vorhandenvector
, aber der Speicher kann verwendet werden. Dies wird dann möglicherweise beschleunigt,push_back()
da der Speicher bereits zugewiesen ist.quelle
std::vector<Custom Class*> content(100);
) übergeben wird