Array von SpeicherAdressen von Objekten



  • Hallo,

    ich hab folgendes Problem:
    Ich lese aus einer Datei eine Folge Kanten eines Graphen ein und erstelle damit die Kantenmenge, was auch kein Problem ist.
    Für die Kanten gibt es eine Struktur edge, in der ich 2 Objekte der Struktur vertex erzeuge.
    Nun will ich neben der Kantenmenge auch noch die Knotenmenge erstellen.
    Dazu hab ich mir überlegt, dass ich ja einfach die Adressen der beiden Knoten der Kante (die ich jeweils gerade zuvor erstellt hab) in einem Array speichern könnte.
    Hier mal die Struktur für die Knoten:

    struct vertex {
        int i;
    };
    
    vertex **V;
    

    Mit vertex **V erstelle ich das Array. Allerdings bekomme ich es einfach nicht gebacken die Adressen darin abzuspeichern und darauf zuzugreifen.

    Kann mir evtl jem. helfen?

    MfG



  • Hä? Zeig doch mal was du hast. Du willst also ein 2 dimensionales Zeigerarray? Und was für Adressen? o0
    :xmas2:



  • Also ich habe Objekte einer Struktur edge. Jedes dieser Objekte beinhaltet 2 Objekte der Struktur vertex. Und ich hab mir gedacht, ich kann die Adressen auf diese Vertex-Objekte in nem Array speichern und dann über die abgelegten Adressen auf die Objekte zugreifen.



  • Das geht so:

    struct edge
    {
      vertex v1,v2;
    };
    
    vector<vertex*> vertexes;
    edge e;
    vertexes.push_back(&e.v1);
    vertexes.push_back(&e.v2);
    


  • Danke für deine Antwort. Hab auf jeden Fall dazu gelernt, auch wenns nicht genau das war was ich gesucht hab (meine Schuld, hab mich nicht deutlich genug ausgedrückt).
    Wenn ich nun nämlich die Adressen an ganz bestimmten Arraypositionen speichern will, kann ich das ja nicht mit vector machen, oder? Da brauche ich dann wirklich ein richtiges Array.



  • Also ich hab selber nochmal ein wenig rumprobiert und es funktioniert damit:

    vertex *v = new vertex();
    v->i = 4;
    vertex K[3];
    K[0] = *v;
    vertex *r;
    r = &K[0];
    

    MfG



  • Wenn ich nun nämlich die Adressen an ganz bestimmten Arraypositionen speichern will, kann ich das ja nicht mit vector machen, oder? Da brauche ich dann wirklich ein richtiges Array.

    Nein.

    std::vector<vertex*> vertices(5);
    edge e;
    vertices[3] = &e.v1;
    vertices[4] = &e.v2;
    


  • Ooorndt schrieb:

    Also ich hab selber nochmal ein wenig rumprobiert und es funktioniert damit:

    vertex *v = new vertex();
    v->i = 4;
    vertex K[3];
    K[0] = *v;
    vertex *r;
    r = &K[0];
    

    MfG

    Und was soll das bitteschön werden???



  • Oh, ich dachte mit vector kann ich nur hinten anhängen 🙄
    Na dann mach ichs doch so ...

    Vielen Dank.



  • Hi Ooorndt,

    ich habe noch einen etwas generelleren Tipp.

    Dies hier:

    Ooorndt schrieb:

    Also ich hab selber nochmal ein wenig rumprobiert und es funktioniert damit...

    Ist in C++ (und erst Recht im Zusammenhang mit Pointeraritmetik) ein seeeehr gefährlicher Ratgebergenosse! 😉
    Man kann C++ viel tun, was
    a) compiliert
    b) im Testprogramm läuft und gleichzeitig
    c) undefiniert ist und
    d) im Realbetrieb die Columbia abstürzen lässt.

    Besser ist es, zu verstehen,
    a) warum etwas funktioniert und
    b) wie bestimmte Konstrukte von der Sprache gemeint sind und
    c) was "best practice" für eine bestimmte Problemstellung ist.

    Für sowas kann man gut "Wissen von außen" (Literatur und Foren wie dieses hier) verwenden. Ich habe jedenfalls über Bücher und dieses Forum schon sehr viel gelernt - besonders in der Zeit nachdem ich meinte, C++ und Programmieren zu beherrschen.

    Gerade "best practice" ist zwar oftmals anstrengend, weil man meistens seine komplette Sichtweise ändern und ggf. neue Techniken/Begrifflichkeiten lernen muss - ist gleichzeitig aber IMHO auch der gewinnbringenste Weg, weil er oftmals über ein sehr konkretes Problem hinaus weist und Wissen vermittelt, das auch in vielen anderen Zusammenhängen (und Programmiersprachen) immens hilft.

    Gruß,

    Simon2.


Anmelden zum Antworten