Array oder Liste von Objekten
-
So, ich bin es mal wieder und brauche wieder euren Rat.
Ich bin gerade dabei einen Clustering Algorithmus zu implementieren.
Bei diesem Algorithmus werden Punkte in einem mehrdimesnionalem Raum erzeugt.
Diese Punkte sind Objekte vom Typ Node mit speziellen Eigenschaften.Von der Algorithmus Klasse werden also die Nodes erzeugt und können auch wieder gelöscht werden.
Meine Überlegung war nun einen Array bzw. einen Vektor zu erstellen, in den alle erstellten Nodes eingefügt werden.
Habt ihr mir einen Tip wie ich diese "Nodelist" realisieren soll. Wie genau sollte ich dies dann implementieren?
-
Bisher erstelle ich in meiner Klasse algorithm den Vector:
std::vector<Node> nodelist_vec();wenn ich innerhalb der der Klasse Algorithmus die verschiedenen Phasen des ALgorithmus aufrufe übergebe ich immer eine Referenz auf diesen Vector,
damit ich in diese nodelist Knoten einfügen, löschen oder auch einfach darauf zugreifen kann.Nur mit der Übergabe des Vectors klappt das noch nicht so ganz, wenn ich innerhalb der Klasse des Algorithmus folgende Methode aufrufe:
gng_Zero_StartWithTwoNodes(gng_parameters, nodelist_vec, nodepool);und hier die Methode
void GNG_Algorithm::gng_Zero_StartWithTwoNodes(GNG_Parameters &gng_parameters, std::vector<Node> &nodelist_vec, NodePool &nodepool) { }Dann kann ich den Vektor so nicht übergeben.
-
also ich hatte erst einmal den Vektor falsch initialisiert
das musste natürlich so sein:
std::vector<Node> nodelist_vec;Aber was meint ihr denn sonst so zu der Idee wie ich das implementiere? Ist dies so sinnvoll?
-
Also wenn Du in Deiner "Liste" oft Werte einfügst, dann würde sich eventuell std::list besser eignen als std::vector, denn die Performance beim Einfügen von Elementen ist bei std::list erheblich besser als bei std::vector.
Der std::vector hat dagegen performancemäßig die Nase vorn beim beliebigen Zugriff auf einzelne Elemente im Vector. Die std::list dagegen kann nur mit Hilfe eines Iterators sequentiell Element für Element durchlaufen werden.
-
Ah ok,
wenn ich dann Elemente aus der Liste löschen muss kann ich einfach die Zeiger umhängen und es sollte alles wieder funktionieren.
-
redbomber schrieb:
Ah ok,
wenn ich dann Elemente aus der Liste löschen muss kann ich einfach die Zeiger umhängen und es sollte alles wieder funktionieren.Also wenn Du ein Element aus der Liste löschst, dann brauchst Du selbst keine Zeiger "umhängen". Dies macht std::list natürlich selbst.
-
bergvagabund schrieb:
Dies macht std::list natürlich selbst.
Vor allem kannst du dir dann das Gefrickel mit den Nodes und Zeigern sparen.