Heim >Backend-Entwicklung >C++ >Ist der std::vector-Elementspeicher in C zusammenhängend?

Ist der std::vector-Elementspeicher in C zusammenhängend?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-20 18:56:10291Durchsuche

Is std::vector Element Memory Contiguous in C  ?

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::vector values;
// ... 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!

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