我们在聚类算法创建了三个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