Hat std::vector seine / Ihre Adresse ändern? Wie zu vermeiden

Seit dem die vector-Elemente werden zusammenhängend gespeichert, ich denke, es kann nicht die gleiche Adresse nach einiger push_back ist , da der erste zugewiesenen Platz könnte nicht ausreichen.

Arbeite ich an einem code, wo ich eine Referenz auf ein element in einem Vektor, wie:

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;
}

Aber es ist nicht unbedingt wahr, dass ptr enthält einen Verweis auf v[0], richtig? Wie wäre ein guter Weg, um zu garantieren?

Meine erste Idee wäre die Verwendung von einem Vektor von Zeigern und dynamischer Allokation. Ich Frage mich, ob es ist ein einfacher Weg, das zu tun?

PS.: Eigentlich bin ich mit einem vector von einer Klasse statt "int", aber ich denke, die Probleme sind die gleichen.

  • Warum Holen Sie sich nicht &v[0] nur, wenn Sie es brauchen?
  • Sie halten das index-element anstelle von Zeiger-und dann, um den Zugriff auf() oder operator[]
  • Obwohl: es ist nicht explicited oben, in meinem eigentlichen code, den ich nicht sagen kann, die index-Zugriff nicht mehr, wenn ich es brauche.
  • Yudakov: Tolle Idee! Leider merkte ich, dass mit diesem Ansatz würde von mir verlangen zu tun, eine Menge von änderungen, da hab ich auch schon verwendet, eine Struktur mit Zeigern in andere Teile des Codes, aber ohne Probleme, da war ich pre-allocating den Vektor.
InformationsquelleAutor kunigami | 2010-03-15
Schreibe einen Kommentar