我們在聚類算法創建了三個STL和STL-繼承的數據類型使用的處理:刪除()STL多繼承
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
S的不僅刪除(和內存管理)在Cluster
被刪除,還刪除處理所有成員變量?
注意:所有的成員函數都比較簡單,沒有靜態操作。
是的。但繼承標準容器是一個糟糕的主意。一個宇宙*具有許多簇,但這不是它*所有的*。 –
這些類型的標準容器並非真正意圖被繼承。 –
下面是不繼承的另一個原因:假設將來您需要將集羣的存儲設置爲一個特徵矩陣,以便操作可以在整個矩陣中進行批處理和優化。你不希望你的接口被強制進入STL接口,而是適合你的數據類型:'Cluster :: AddPoint()'。 – Peter