帮我看一下模板类的定义和使用把 谢谢
template <typename Tree> class Dtree{
struct Node{
float threshold;
int attribute;
Node * parent;
Node * lchild;
Node * rchild;
vector<int> classes;
int classsize;
int attri_size;
vector<float> attri_value;
Tree node_num;
Node(Tree data_,Node* p, Node* l, Node* r,int i, int j){
node_num=data_;
parent=p;
lchild=l;
rchild=r;
classsize=i;
attri_size=j;
classes.resize(i);
attri_value.resize(j*2);
}
};
Node* root;
public:
Dtree(Tree data, Node* p, Node* q, Node* e, int i, int j)
{
root = new Node(data,NULL,NULL,NULL,i, j);
}
~Dtree(){
DeleteDtree(root);
}
void DeleteDtree(Node* x);
void initialize(int i, int j, vector<int> &class_num, vector<float> &count, vector< vector< vector<float> > > &train_data);
};
template<typename Tree>
void Dtree<Tree>::initialize(int i, int j, vector<int> &class_num, vector< vector< vector<float> > > &train_data )
{ int k;
for(k=0; k<class_num.size();k++) root->classes[k]=train_data[0][0][k];
Node* l = new Node((1,NULL,NULL,NULL,i,j);
Node* r = new Node((1,NULL,NULL,NULL,i,j);
root->lchild=l;
root->rchild=r;
r->parent=root;
l->parent=root;
}
template<typename Tree>
void Dtree<Tree>::DeleteDtree(Node* x)
{
if(x!=NULL){
if(x->parent!=NULL)DeleteDtree(x->parent);
if(x->lchild!=NULL)DeleteDtree(x->lchild);
if(x->rchild!=NULL)DeleteDtree(x->rchild);
delete x;
x = NULL;
}
}
/////////////////
void main(){
Dtree<int>r(1,NULL,NULL,NULL,class_num.size(), comma_num);
r.initialize(class_num.size(), comma_num, class_num,count,train_data);
}
注:initialize函数只是用来初始化root的。
1)这样的类定义和使用对不对呢,
2)然后这个程序结束时还要调用DeleteDtree 函数吗?