Minha pergunta é simples: os elementos std :: vector são garantidamente contíguos? Em resumo, posso usar o ponteiro para o primeiro elemento de um std :: vector como um C-array?
Se não me falha a memória, o padrão C ++ não oferecia tal garantia. No entanto, os requisitos std :: vector eram tais que era virtualmente impossível atendê-los se os elementos não fossem contíguos.
Alguém pode esclarecer isso?
Exemplo:
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
, especificamente aquelas que mudam seu tamanho (por exemplo, push_back()
), podem solicitar uma realocação do vetor subjacente que invalida o ponteiro para o qual foi copiado array
. É o mesmo princípio por trás do uso de um vector :: iterator em vez de um ponteiro para o vetor. :)
values
dentro daqueleif
bloco. Não sei a resposta para sua pergunta, entretanto, estou apenas deixando um comentário. :)