Heim >Backend-Entwicklung >C++ >Bleiben STL-Vektorelemente nach der Größenänderung im Speicher fortlaufend?
Speicherkontiguität von STL-Vektorelementen
Bei der Arbeit mit STL-Vektoren ist es wichtig, das Speicherlayout ihrer Elemente zu verstehen. Es stellt sich häufig die Frage: Wenn die Größe eines Vektors geändert wurde, können wir dann mit Sicherheit davon ausgehen, dass seine Elemente zusammenhängend im Speicher gespeichert sind?
Analyse
Der C 03-Standard (23.2 .4.1) liefert die Antwort:
The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
Einfacher ausgedrückt bedeutet dies, dass die Adresse des ersten Elements (&v[0]) eines Vektors gleich der Adresse seines n-ten Elements ( &v[n]) plus dem Offset von n. Dies gilt für Vektoren, die andere Datentypen als boolesche Werte enthalten.
Beispiel
Betrachten Sie den folgenden Code:
vector<char> vc(100); // do some stuff with vc vc.resize(200); char* p = &vc[0]; // do stuff with *p
Gemäß dem Standard haben wir kann mit Sicherheit davon ausgehen, dass die in p gespeicherte Adresse nach der Größenänderung des Vektors zusammenhängenden Zugriff auf alle 200 Elemente des Vektors ermöglicht. Dies liegt daran, dass die Elemente des Vektors garantiert nacheinander im Speicher gespeichert werden, was eine effiziente Durchquerung und einen effizienten Zugriff ermöglicht.
Vorsicht
Es ist jedoch wichtig Beachten Sie, dass beim Hinzufügen von Elementen zu einem Vektor dessen Speicher möglicherweise neu zugewiesen wird. Dies kann alle vorhandenen Zeiger oder Iteratoren auf die Vektorelemente ungültig machen, daher ist es wichtig, dies bei der Arbeit mit Vektoren zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonBleiben STL-Vektorelemente nach der Größenänderung im Speicher fortlaufend?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!