Ich habe C++ für eine Weile gelernt, und gerade erst begonnen, verknüpfte Listen zu suchen. Ich kann eine Template-Klasse List mit den üblichen Funktionen einfügen/entfernen von hinten/vorne erstellen. Jetzt kam ich mit einer Übung, die mich auffordert, eine Funktion zu schreiben, um Einfügungen/Löschungen irgendwo in der Liste zu handhaben.Einfügen/Löschen irgendwo in einer verknüpften Liste in C++
Bitte beachten Sie, dass meine Fragen sind sehr einfach.
Das Problem, das ich habe ist, dass ich die Frage nicht eindeutig zu sehen. Welche Art von Informationen benötigt die Funktion? Zum Beispiel für das Löschen, I mit mehreren Kandidaten kommen kann: 1), um den ersten Knoten löschen, die einen bestimmten Wert (Argument hat: value) 2) Löschen alle Knoten mit einem bestimmten Wert (Argument: value) 3) löschen ein bestimmter Knoten (Argument: Zeiger auf diesen Knoten) 1) und 2) kann ich leicht codieren. 3) ist schwieriger, aber ich kann es auch tun. Ich sehe den Punkt in 3) einfach nicht. Ist es üblich, Knoten (außerhalb der Listendefinition) zu manipulieren, wenn man Listen verwendet? Wie in, ist es üblich für ein Programm, das Listen benutzt, um Zeiger auf die Knoten zu manipulieren?
Was ist die übliche Bedeutung von „löschen überall“ in dieser Einstellung?
Auch für „insert überall“ ist der Wortlaut seltsam. Was bedeutet "überall"? Soll der Platz in der verknüpften Liste von einem bestimmten Knoten vergeben werden?
Nicht wirklich klar, was Sie fragen. Sie möchten, dass wir raten, was mit einer Übung gemeint ist, die Sie irgendwo gelesen haben? Sie können sich die Standardcontainer ansehen, um zu sehen, wie ihre Schnittstelle hergestellt wird. Sie verwenden normalerweise Iteratoren – user463035818
Die Funktion erfordert eine Art von Ortsmarkierung. Es kann ein int oder besser noch ein Objekt sein, das eine Position kapselt, so dass Sie nicht über die gesamte Liste iterieren müssen (wie die Art, wie std :: list seinen Iterator verwendet). – StoryTeller
Wenn dies nur eine Übung ist, möchten Sie vielleicht alle genannten Wege und noch mehr, wenn Sie durch andere interessante Ideen kommen. Sie könnten auch verschiedene Arten des Reagierens auf Fehler beim Löschen üben (wie kein Element gefunden -> bool oder enum zurückgeben, Fehler werfen usw.). "Anywhere" könnte in diesem Kontext alles bedeuten, was Sie wollen, solange es Sinn macht. Ich würde Option hinzufügen, um Knoten am angegebenen Index auch zu löschen. –