0

非二分木を作成したいと思います。ポインタのポインタでこの型の構造体を考えた

struct tree{
    string name;
    int sonc;
    tree** son;
};

両方の大きなエントリでクラッシュします

void insertSon(tree* &a, string n){

if (a->sonc==0){
    a->son= new tree*;}

a->son[a->sonc]= new tree;
a->son[a->sonc]->name=n;
a->son[a->sonc]->sonc=0;
a->sonc++;}

キャンセルもあるけど

void deleteTree(tree* &a){
for (int i=0;i<(a->sonc);++i){
    deleteTree(a->son[i]);
}
delete a;}

ツリー人口を含むメイン cpp

tree *tree1;
tree1=new tree;


tree1->name="C:\\TEMP";
tree1->sonc=0;
insertSon(tree1,"C:\\TEMP\\aadvfdbdsbdfgfile1.txt");
insertSon(tree1,"C:\\TEMP\\aadvfdbdsbdfgfile2.txt");
insertSon(tree1,"C:\\TEMP\\FOLDER1");

tree *lastf1=tree1->son[tree1->sonc-1];
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\aadvfdbdsbdfgfile3.txt");
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\aadvfdbdsbdfgfile4.txt");
insertSon(lastf1,"C:\\TEMP\\FOLDER1\\FOLDER2");

tree *lastf2=lastf1->son[lastf1->sonc-1];
for (int i=0;i<100;++i){
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile5.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile6.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile7.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile8.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfile9.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileA.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileB.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileC.txt");
insertSon(lastf2,"C:\\TEMP\\FOLDER1\\FOLDER2\\aadvfdbdsbdfgfileD.txt");
}
4

3 に答える 3

1

に配列を割り当てることはなくson、単一のtree.

std::vectorの機能を正確に複製しています。std::vector自分でアレイを管理する代わりに使用します。

于 2012-10-23T15:57:59.660 に答える
0

ありがとうございます

これらの変更に対応

struct tree{
    string name;
    int sonc;
    vector< tree* > son;
};

そして挿入手順

void insertSon(tree* &a, string n){
tree *atmp;
atmp = new tree;
atmp->name=n;
atmp->sonc=0;
(a->son).push_back(atmp);
a->sonc++;}

shared_ptr と unique_ptr の利点は何ですか?

于 2012-10-24T09:36:44.597 に答える