Mi pregunta es simple: ¿se garantiza que los elementos std :: vector sean contiguos? En orden, ¿puedo usar el puntero al primer elemento de un std :: vector como una matriz C?
Si mi memoria no me sirve bien, el estándar C ++ no ofrecía tal garantía. Sin embargo, los requisitos de std :: vector eran tales que era prácticamente imposible cumplirlos si los elementos no eran contiguos.
¿Alguien puede aclarar esto?
Ejemplo:
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
, específicamente las que cambian su tamaño (por ejemplo, push_back()
), pueden provocar una reasignación del vector subyacente que invalida el puntero copiado array
. Es el mismo principio detrás del uso de un vector :: iterador en lugar de un puntero al vector. :)
values
dentro de eseif
bloque. Sin embargo, no sé la respuesta a tu pregunta, así que solo dejo un comentario. :)