我正在尝试为学校写一个程序,不知道从哪里开始。
我对指针不是很好,所以我有点困难。
到目前为止代码(更新):
#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:现在我在向一位顾问添加更多学生时遇到了麻烦。答案 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;
}
}