帮我看一下模板类的定义和使用把 谢谢

randomblbl 2008-03-05 06:15:59
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 函数吗?
...全文
42 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
randomblbl 2008-03-05
  • 打赏
  • 举报
回复
但是vector的大小一直在变,那样会不会影响程序?
sinosinux 2008-03-05
  • 打赏
  • 举报
回复
vector 可以
randomblbl 2008-03-05
  • 打赏
  • 举报
回复
这里的vector 有没有错啊?

vector可以这样用吗?

dubiousway 2008-03-05
  • 打赏
  • 举报
回复
程序结束后,一般操作系统系统会把内存都回收的,所以不掉用DeleteDtree 函数也没什么;不过这不是个好习惯。

64,175

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧