Poiché gli elementi vettoriali sono archiviati in modo contiguo, suppongo che potrebbe non avere lo stesso indirizzo dopo alcuni push_back, perché lo spazio allocato iniziale non può essere sufficiente.Lo std :: vector cambia indirizzo? Come evitare
Sto lavorando su un codice in cui ho bisogno di un riferimento a un elemento in un vettore, come:
int main(){
vector<int> v;
v.push_back(1);
int *ptr = &v[0];
for(int i=2; i<100; i++)
v.push_back(i);
cout << *ptr << endl; //?
return 0;
}
Ma non è necessariamente vero che ptr
contiene un riferimento a v[0]
, giusto? Come sarebbe un buon modo per garantirlo?
La mia prima idea sarebbe quella di utilizzare un vettore di puntatori e allocazione dinamica. Mi chiedo se c'è un modo più semplice per farlo?
PS .: In realtà sto usando un vettore di una classe invece di int, ma penso che i problemi siano gli stessi.
Perché non ottenere '& v [0]' solo quando ne hai bisogno? – kennytm
È possibile mantenere l'indice dell'elemento anziché il puntatore e quindi accedervi utilizzando a() o operatore [] –
@KennyTM Sebbene: non sia esplicitato sopra, nel mio codice effettivo non posso dire a quale indice accedere più quando ne ho bisogno. – kunigami