Wir drei STL und STL-geerbt erstellen Datentypen zur Verwendung in einem Cluster-Algorithmus:remove() Bearbeitung von STL Multi-Vererbung
typedef std::vector<double>Point; // A list of parameters (a single observation)
struct Cluster : std::list<Point> { // A list of Points
// Additional member variables
Point centroid;
bool centroid_valid;
bool sort_valid;
// Cluster functions omitted
};
struct Universe : std::list<Cluster> { // A list of Clusters
// No member variables
// Universe functions omitted
};
Dies ist ein Versuch, in vollem Umfang die STL zu verwenden, so dass nichts new
ist würde existieren. Die Sorge ist, die mit der Art von nachrangigen STL-Funktionalität zu tun, speziell:
Wenn wir remove()
ein Cluster
Element aus einer Universe
Liste, würden die STL behandeln nicht nur das Löschen (und Speicherverwaltung) alles Point
s in der Cluster
entfernt werden, sondern auch die Löschbehandlung aller Mitgliedsvariablen?
Hinweis: Alle Elementfunktionen sind relativ einfach, ohne statische Operationen.
Ja. Aber es ist eine schlechte Idee, Standardcontainer zu erben. Ein Universum * hat * eine Anzahl von Clustern, aber das ist nicht alles, was es * ist. –
Diese Art von Standardcontainern soll nicht wirklich vererbt werden. –
Hier ist ein weiterer Grund, nicht zu erben: Nehmen wir an, Sie müssen in Zukunft den Speicher eines Clusters ändern, um beispielsweise eine Eigen-Matrix zu sein, damit Operationen über die gesamte Matrix zusammengefasst und optimiert werden können. Sie wollen nicht, dass Ihre Schnittstelle in die STL-Schnittstelle gezwungen wird, sondern stattdessen durch Ihren Datentyp: 'Cluster :: AddPoint()' zum Beispiel. – Peter