2012-02-19 48 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; 
} 

我想要做的就是兩個人的名字的輸入,然後將其存儲在數據庫中。

例如,名字總是顧問,第二名是學生。

我知道如何在紙上做,而不是代碼..所以我正在尋找一些例子/提示。

實施例:

輸入:

約翰史蒂芬

約翰巴里

約翰哈羅德

輸出:

顧問:約翰

學生:史蒂芬,巴里,哈羅德

我想我的程序採取約翰,把他在矢量數據庫的第一項,然後我想借此史蒂芬·巴里和哈羅德和放他們都在矢量兒童。

無論如何,我知道我應該這樣做,作爲一棵樹,並在顧問是父母和學生是樹的孩子。

歡迎任何幫助/建議。謝謝。

編輯#1:現在我只是無法添加更多的學生到一個顧問。

+0

看看stl's'push_back'函數 – 2012-02-19 20:03:46

回答

3

你永遠不會添加到向量。矢量需要添加元素,然後才能使用[]運算符添加索引。

變化

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

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

要打印的學生,你可以訪問children變量您for循環內以完全相同的方式,你做打印顧問的名字。

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 2012-02-19 20:12:49

+0

您需要創建一個新的'node'並在顧問程序 - >要添加的子項上再次調用'push_back'。你在做什麼? – Dervall 2012-02-19 20:14:51

+0

我更新了我的代碼,當我添加第二個學生時,它只會更改爲第一個學生。我輸入約翰史蒂夫巴里..我得到的輸出是約翰史蒂夫史蒂夫。 – Claud 2012-02-19 20:18:46