La mia domanda è semplice: gli elementi std :: vector sono garantiti per essere contigui? In ordine di parola, posso usare il puntatore al primo elemento di uno std :: vector come un C-array?
Se la mia memoria mi serve bene, lo standard C ++ non offre tale garanzia. Tuttavia, i requisiti std :: vector erano tali che era virtualmente impossibile soddisfarli se gli elementi non erano contigui.
Qualcuno può chiarire questo?
Esempio:
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
, in particolare che cambiano la sua dimensione (ad esempio push_back()
), possono richiedere una riallocazione del vettore sottostante che invalida il puntatore in cui è stato copiato array
. È lo stesso principio alla base dell'uso di un vettore :: iteratore invece di un puntatore nel vettore. :)
values
all'interno di quelif
blocco. Non conosco la risposta alla tua domanda, quindi lascio solo un commento. :)