Speicherkontiguität von std::Vector-Elementen
Besorgte Entwickler werfen oft die Frage auf, ob Elemente innerhalb eines std::vector garantiert sind zusammenhängend sein. Diese Eigenschaft bestimmt, ob es zulässig ist, den Zeiger auf das erste Element als Array im C-Stil zu behandeln.
Standardbestimmungen
Anfangs vernachlässigte der C 98-Standard die Angabe diesen Aspekt. Spätere technische Berichte (TR) haben dieses Versäumnis jedoch korrigiert, und der kommende C 0x-Standard wird es als explizite Anforderung aufnehmen.
TR-Spezifikationen
N2798, ein Entwurf von C 0x, postuliert:
"Ein Vektor ist ein Sequenzcontainer, der Iteratoren mit wahlfreiem Zugriff unterstützt ... Die Elemente von a Vektor werden zusammenhängend gespeichert, was bedeutet, dass, wenn v ein Vektor ist, bei dem T ein anderer Typ als bool ist, er der Identität &v[n] == &v[0] n für alle 0 <= n < )."
Beispiel
Betrachten Sie basierend auf dieser Spezifikation den folgenden Code Snippet:
std::vectorvalues; // ... fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int v = array[i]; // do something with 'v' } } Der C-Standard garantiert, dass dieser Code wie vorgesehen funktioniert, indem er direkten Speicherzugriff auf die Elemente des Vektors ermöglicht.
Das obige ist der detaillierte Inhalt vonIst der std::vector-Elementspeicher in C zusammenhängend?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!