Meine Frage ist einfach: Sind std :: vector-Elemente garantiert zusammenhängend? Kann ich den Zeiger auf das erste Element eines std :: -Vektors als C-Array verwenden?
Wenn mein Gedächtnis mir gut tut, hat der C ++ - Standard keine solche Garantie gegeben. Die Anforderungen an std :: vector waren jedoch so, dass es praktisch unmöglich war, sie zu erfüllen, wenn die Elemente nicht zusammenhängend waren.
Kann jemand das klären?
Beispiel:
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'
}
}
values
, die ihre Größe ändern (z. B. push_back()
), können zu einer Neuzuweisung des zugrunde liegenden Vektors führen, wodurch der kopierte Zeiger ungültig wird array
. Es ist das gleiche Prinzip wie bei der Verwendung eines vector :: iterator anstelle eines Zeigers in den Vektor. :)
values
in diesemif
Block mutieren . Ich kenne die Antwort auf Ihre Frage jedoch nicht und hinterlasse nur einen Kommentar. :)