Supongamos que tengo un vector de enteros,ubicaciones de puntero de vector garantizadas?
std::vector<int> numbers;
que se rellena con un montón de valores, entonces me dicen que haga esto (donde existe una entrada a 43)
int *oneNumber = &numbers[43];
Está oneNumber garantiza que siempre apunte al int en el índice 43, incluso si digamos que cambio el tamaño de los números a algo como numbers.resize (46)?
No estoy 100% seguro de qué comportamiento esperado está aquí, sé que los vectores están garantizados para ser contiguos pero no estoy seguro si esa continuidad también significa que todos los índices en el vector permanecerán en el mismo lugar a lo largo de su vida.
Por esta razón yo siempre desconfío de crear un vector de tipos de valor, porque, inevitablemente, necesito un puntero a los objetos dentro del vector. Así que guardo una referencia como 'int * ref = & numbers [43]' .. luego hago un par de 'push_back's en' numbers' y WHAMMO! Error: 'ref' no es válido, porque' numbers' ha sido completamente reasignado y guardado en un espacio de memoria completamente diferente. – bobobobo
@bobobobo Muy cierto. Aunque para situaciones donde se conoce el número de elementos en el momento de la creación (y no, no puedo usar 'std :: array', porque' 'emplace' -construye los valores mediante bucle),' reserve' garantiza todos los punteros/iteradores en el vector seguirá siendo válido, siempre que no se redimensione más allá de su capacidad actual (lo que podría forzar una reasignación y, por lo tanto, mover las direcciones de los valores contenidos). Esto me ha salvado un par de veces, pero cada vez que paso un tiempo, me olvido de "reservar" y me rasco la cabeza por un tiempo hasta que lo recuerdo. : D –