Moje pytanie jest proste: czy elementy std :: vector są na pewno ciągłe? W słowie kolejności, czy mogę użyć wskaźnika do pierwszego elementu std :: vector jako tablicy C?
Jeśli moja pamięć dobrze mi służy, standard C ++ nie dawał takiej gwarancji. Jednak wymagania std :: vector były takie, że praktycznie niemożliwe było ich spełnienie, gdyby elementy nie były ciągłe.
Czy ktoś może to wyjaśnić?
Przykład:
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
, a konkretnie zmieniają jego rozmiar (np. push_back()
), Mogą skłonić do ponownej alokacji wektora bazowego, który unieważnia wskaźnik skopiowany do array
. Ta sama zasada obowiązuje przy używaniu vector :: iterator zamiast wskaźnika do wektora. :)
values
w tymif
bloku. Nie znam jednak odpowiedzi na twoje pytanie, więc zostawiam tylko komentarz. :)