Mi pregunta es simple: ¿los elementos std :: vector están garantizados para ser contiguos? En orden palabra, ¿puedo usar el puntero al primer elemento de std :: vector como C-array?¿Están garantizados los elementos std :: vector contiguos?
Si mi memoria me sirve, el estándar C++ no garantiza tanto. 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'
}
}
Sé que estás en problemas si mutate 'values' dentro de ese bloque' if'. No sé la respuesta a tu pregunta, así que dejo un comentario. :) –
@Greg: ¿Qué problema? ¿Puedes elaborar un poco? – Reunanen
Supongo que quiso decir que presionar nuevos valores puede desencadenar un "realloc" que haría que la matriz se volviera inválida. –