Heim >Backend-Entwicklung >C++ >Bleiben STL-Vektorelemente nach der Größenänderung im Speicher fortlaufend?

Bleiben STL-Vektorelemente nach der Größenänderung im Speicher fortlaufend?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 07:26:03579Durchsuche

Do STL Vector Elements Remain Consecutive in Memory After Resizing?

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 &amp;v[n] == &amp;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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn