Ich versuche die Depth First Search als eine Funktion zu implementieren, die ein Diagramm aufnimmt und das DFS ausgibt.Wie kann ich legal auf die privaten Felder Vektor und Karte zugreifen und diese ändern, ohne die Kapselung zu verletzen?
Oben ist die Klasse, die ich für den Graph gemacht habe. Ich versuche, eine Funktion zu machen, die den Zeiger auf den privaten Vektor und die Karte zurückgibt, damit ich für Schleife Operationen auf der Adjazenzliste und den Map-Datenstrukturen des Graphen ausführen kann. Ich weiß jedoch, dass die Manipulation der Datenstrukturen direkt eine Verletzung der Kapselung ist und ich wollte die objektorientierte Disziplin meines Programms beibehalten. Wie ist dies ohne Verletzung der Kapselung möglich?
PS: Ich freue mich nicht auf die Verwendung von Freund-Funktion, da ich nicht die Funktion eine Ausnahme machen möchte. Ich möchte eine Mainstream-Lösung finden, die von Programmierern gerne genutzt wird und eine disziplinierte Lösung darstellt. Ich kann jedoch meine Klassenfelder/Zugänglichkeit bei Bedarf ändern.
Vielen Dank für Ihre Zeit!
Kann Haben Sie eine 'public' Funktion, die eine Kopie von' map' und 'vector' zurückgibt? Vorausgesetzt, die Anrufer müssen keine Elemente ändern, sollte dies kein Problem darstellen. – Tas
Sie können (const) Iteratoren an die 'begin()' und 'end()' jeder Sequenz zurückgeben, was das Iterieren, aber nicht das Einfügen oder Löschen ermöglicht. Leider bietet das keine Suche nach der 'std :: map'. –
Die Anrufer müssen Elemente ändern. –