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
wobei:
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' } }
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!