[C ++ / Zeiger]: mit Objekten A und B (B-Vektor Element hat, die Zeiger auf einem speichert), A zu kennen, ist es möglich, zum Abrufen Zeiger nach B?

StackOverflow https://stackoverflow.com/questions/1464758

Frage

Beim Versuch, c ++ zu lernen, habe ich versucht, Klasse zu implementieren sehr einfach Trie darstellt. Ich kam mit dem folgenden:

class Trie {
public:
    char data;
    vector<Trie* > children;

    Trie(char data);
    Trie* addChild(Trie* ch);    // adds child node

    (skipped others members/methods)

};

Methode addChild prüft, ob Kind ch mit den gleichen Daten ist in Vektor Kindern , wenn nicht, dann es fügt es dort, wenn ja -. kehrt Zeiger auf bereits bestehende Kind

Nun, wenn man bedenkt diesen Code-Snippet:

Trie t('c');
Trie* firstchild = new Trie('b');
Trie* secondchild = new Trie('a');


firstchild->addChild(secondchild);
t.addChild(firstchild);

, wenn ich nur Zeiger auf haben secondchild , ist es möglich, irgendwie zurückgeben Zeiger auf first oder vielleicht sogar t

Ich würde gerne wissen, ob es möglich, dies zu tun, weil die Logik meines Arbeits Code muss die Trie „up“ (von den unteren Knoten Oberen), das die übergeordneten aktuellen Objekt zu durchqueren. Derzeit bin ich nur rekursive Funktion nach unten zu reisen - aber ich frage mich, ob es eine andere Möglichkeit existiert

Es tut mir leid, wenn oben unklar ist oder wenn ich irgendwo vermasselt, ich bin ziemlich unerfahren und Schreiben aus meinem Gedächtnis, ohne den Arbeitscode.

War es hilfreich?

Lösung

Sie müssen etwas hinzufügen, wie

Trie* parent;

oder

Trie* previoussibling;
Trie* nextsibling;

auf die Klasse direkt von firstchild zu bekommen, um zu secondchild oder umgekehrt oder von einem der Kinder zu gehen bis t.

Beachten Sie, wenn Sie diese Art von Beziehung brauchen, dann werden Sie mehr Wartung erfordern, wenn das Hinzufügen und Knoten alle Verbindungen korrekt zu halten entfernen.

Andere Tipps

Das Trie-Objekt nicht im Auge behalten von übergeordnetem Objekt. Sein im Allgemeinen ähnlich wie einzelne verknüpfte Liste und Sie können nicht durchqueren zurück, wenn Sie „wissen“ die Eltern.

class Trie {
public:
    char data;
    vector<Trie* > children;
    Trie* parent;

    Trie(char data):parent(NULL){}
    Trie* addChild(Trie* ch)
    { //set the parent
     ch->parent = this;
    }

    (skipped others members/methods)

};

Dann würde aussehen Traverse etwas wie:

traverse(Trie* pPtr)
{
Trie* currentPtr = pPtr;
 while(currentPtr)
 {
  currentPtr = currentPtr->parent;
 }

}

  

ich nur Zeiger müssen secondchild,   irgendwie ist es möglich zurückkehren   Zeiger selbst zu first oder vielleicht   t?

Nein. Sie haben diese Beziehung, um sich selbst zu schaffen, indem die first als Eltern des zweiten Kindes vorbei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top