2012-02-19 17 views
0

私は学校のためのプログラムを書こうとしており、どこから始めるべきかわかりません。アドバイザー/学生ツリーC++

私はポインタがあまりよくないので、少し難しいです。

コード今のところ(更新):私は何をしたいか

#include<iostream> 
#include<vector> 
#include<string> 
using namespace std; 

struct node 
{ 
    string name; 
    node * parent; 
    vector<node*> children; 
}; 

int main() 
{ 
    vector<node*> dataBase; 
    node *advisor, *student, *student2; 
    advisor = new node; 
    student = new node; 
    student2 = new node; 

    cin>>advisor->name>>student->name>>student2->name; 

    advisor->children.push_back(student); 
    advisor->children.push_back(student2); 
    dataBase.push_back(advisor); 

    for(int i=0; i<dataBase.size(); i++) 
    { 
     cout<<dataBase[i]->name<<endl; 
     for(int j=0; j<dataBase[i]->children.size(); j++) 
     { 
      cout<<dataBase[i]->children[i]->name<<endl; 
     } 
    } 

    system("pause"); 
    return 0; 
} 

は、2名の入力を取得し、データベースに格納しています。

たとえば、最初の名前は常に顧問になり、2番目の名前は学生になります。

私は紙でそれを行う方法を知っています、コードではありません。だから私はいくつかの例/ヒントを探しています。

例:

入力:

ジョン・スティーブン

ジョン・バリー

ジョン・ハロルド

出力:

顧問:ジョン

学生:スティーブン、バリー、ハロルド

私は私のプログラムは、ジョンを取り、ベクトルデータベースの最初のエントリで彼を置きたいと、私はスティーブン・バリーとハロルドを取り、入れたいですそれらはすべてベクトルの子供の中にあります。

とにかく私はこれをツリーとして、そして顧問が親であり、学生が木の子であることを知っています。

ご協力いただきありがとうございます。ありがとうございました。

EDIT#1:今はもう1人のアドバイザーを増やすことができません。

+0

、作品STLの 'push_back'機能 –

答えて

3

あなたはベクターに決して加えてはいません。ベクトルには、[]演算子を使用してインデックスを追加する前に要素を追加する必要があります。学生を印刷するに

advisor->children.push_back(student); 
dataBase.push_back(advisor); 

変更

dataBase[0]=advisor; 
advisor->children[0]=student; 

、あなたは顧問の名前を印刷するために行うとまったく同じように、あなたのforループ内children変数にアクセスすることができます。

for(int i=0; i<dataBase.size(); i++) 
{ 
    cout<<dataBase[i]->name<<endl; 
    for(int j=0; j<dataBase[i]->children.size(); j++) 
    { 
     cout<<dataBase[i]->children[j]->name<<endl; 
    } 
} 
+0

を見ていただきありがとうございます。今私は複数の学生を追加することに問題があります。 – Claud

+0

新しい 'node'を作成し、それを追加したいadvisor-> childrenに' push_back'をもう一度呼び出す必要があります。今何をしてるの? – Dervall

+0

私は自分のコードを更新し、2番目の生徒を追加すると最初の生徒に変わります。私はジョン・スティーブ・バリーを入力し、得られる出力はジョン・スティーブ・スティーブです。 – Claud