Мы создали три типа данных STL и STL-наследуется для использования в алгоритме кластеризации:удалить() Обработка STL Multi-Inheritance
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
};
Это попытка полностью использовать STL так ничего не new
в существование. Озабоченность, что связано с характером субординированного функциональности STL, а именно:
Если бы мы remove()
Cluster
элемент из Universe
списка, бы STL обрабатывать не только удаление (и управление памятью) всех Point
с в Cluster
, подлежащем удалению, а также удаления всех переменных-членов?
Примечание: все функции-члены относительно просты, без статических операций.
Да. Но неплохо наследовать стандартные контейнеры. Вселенная * имеет * несколько кластеров, но это еще не все, что есть *. –
Эти стандартные контейнеры на самом деле не предназначены для наследования. –
Вот еще одна причина не наследовать: предположим, что в будущем вам нужно будет изменить хранилище кластера, чтобы быть, скажем, Eigen-матрицей, чтобы операции можно было объединить и оптимизировать по всей матрице. Вы не хотите, чтобы ваш интерфейс был принудительно подключен к интерфейсу STL, но вместо этого соответствовал вашему типу данных: 'Cluster :: AddPoint()' например. – Peter