顾问/学生树c ++

时间:2012-02-19 19:58:41

标签: 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;
}

我想要做的是获取两个名称的输入,然后将其存储在数据库中。

例如,名字始终是顾问,第二名是学生。

我知道怎么在纸上做,只是不用代码..所以我正在寻找一些例子/提示。

示例:

输入:

John Steven

约翰巴里

John Harold

输出:

顾问:约翰

生:史蒂芬,巴里,哈罗德

我希望我的程序能够接受John并将他放在矢量数据库的第一个条目中,然后我想把Steven Barry和Harold带到矢量子项中。

无论如何我知道我应该以树为主,顾问是父母,学生是树的孩子。

欢迎任何帮助/建议。谢谢。

编辑#1:现在我在向一位顾问添加更多学生时遇到了麻烦。

1 个答案:

答案 0 :(得分: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;
    }
}