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

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

Patricia Arquette
Freigeben: 2024-12-20 18:56:10
Original
241 Leute haben es durchsucht

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage