Ma question est simple: les éléments std :: vector sont-ils garantis contigus? Dans l'ordre, puis-je utiliser le pointeur vers le premier élément d'un std :: vector comme tableau C?
Si ma mémoire est bonne, le standard C ++ ne faisait pas une telle garantie. Cependant, les exigences std :: vector étaient telles qu'il était pratiquement impossible de les satisfaire si les éléments n'étaient pas contigus.
Quelqu'un peut-il clarifier cela?
Exemple:
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
, en particulier qui modifient sa taille (par exemple, push_back()
), peuvent provoquer une réallocation du vecteur sous-jacent qui invalide le pointeur copié array
. C'est le même principe que d'utiliser un vector :: iterator au lieu d'un pointeur dans le vecteur. :)
values
intérieur de ceif
bloc. Cependant, je ne connais pas la réponse à votre question, alors je laisse juste un commentaire. :)