Heim > Backend-Entwicklung > C++ > Ist gewährleistet, dass std::vector-Elemente im Speicher zusammenhängend sind?

Ist gewährleistet, dass std::vector-Elemente im Speicher zusammenhängend sind?

DDD
Freigeben: 2024-12-26 05:35:38
Original
767 Leute haben es durchsucht

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

Kann ich std::vector-Elemente als zusammenhängende Arrays behandeln?

Es stellt sich die Frage, ob die Elemente innerhalb eines std::vector garantiert sind um zusammenhängende Speicheradressen zu belegen, sodass wir seinen Zeiger auf das erste Element als a behandeln können C-Array.

Historischer Kontext:

Im C 98-Standard fehlte diese Garantie. Dennoch machten es die Anforderungen des Standards für std::vector unwahrscheinlich, dass Elemente nicht zusammenhängend wären.

Aktueller Standard:

Diese Angelegenheit wurde jedoch im geklärt C 0x-Standard (später umbenannt in C 11). Laut TR, das den C 98-Standard geändert hat: „Die Elemente eines Vektors werden zusammenhängend gespeichert.“ Das bedeutet, dass für einen Vektor eines anderen Typs als bool Folgendes gilt:

&v[n] == &v[0] + n
Nach dem Login kopieren

wobei:

  • v der Vektor ist
  • n ein ist Index zwischen 0 und v.size() - 1

Beispiel:

Als Ergebnis ist der folgende Code jetzt gültig und funktioniert wie erwartet:

std::vector<int> 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'
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonIst gewährleistet, dass std::vector-Elemente im Speicher zusammenhängend sind?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage