Meine Frage ist einfach: Sind std :: vector Elemente garantiert zusammenhängend? Kann ich den Zeiger auf das erste Element eines std :: vectors als C-Array benutzen?Sind std :: vector Elemente garantiert zusammenhängend?
Wenn mir mein Gedächtnis gut tut, hat der C++ - Standard keine solche Garantie gegeben. Die std :: vector-Anforderungen 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'
}
}
Ich weiß, dass Sie in Schwierigkeiten sind, wenn Sie "Werte" innerhalb dieses 'if' Blocks mutieren. Ich kenne die Antwort auf Ihre Frage nicht, deshalb hinterlasse ich nur einen Kommentar. :) –
@Greg: Welche Schwierigkeiten - können Sie ein wenig ausarbeiten? – Reunanen
Ich nehme an, er meinte, dass das Drücken neuer Werte einen "realloc" auslösen könnte, der dazu führen würde, dass das Array ungültig wird. –