Советник/Дерево студентов С++

Я пытаюсь написать программу для школы и не знаю с чего начать.

Я не очень хорош с указателями, поэтому у меня есть немного сложности.

Код до сих пор (ОБНОВЛЕНО):

#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<</database[i]-></endl;></database.size();></node*></node*></string></vector></iostream>
<p> Я хочу сделать ввод двух имен, а затем сохранить их в базе данных.</p> <p> Например, первое имя всегда будет советником, а второе - учеником.</p> <p> Я знаю, как это сделать на бумаге, просто не с кодом.. поэтому я ищу несколько примеров/советов.</p> <p> Пример:</p> <p> <span>Входные</span> данные <span>:</span></p> <p> Джон Стивен</p> <p> Джон Бэрри</p> <p> Джон Гарольд</p> <p> <span>Вывод:</span></p> <p> Советник: Джон</p> <p> Студенты: Стивен, Барри, Гарольд</p> <p> Я хочу, чтобы моя программа взяла Джона и поставила его в первую запись векторной базы данных, а затем я хочу взять Стивена Барри и Гарольда и поместить их в векторных детей.</p> <p> В любом случае, я знаю, что я должен делать это как дерево и где советник является родителем, а учащиеся - дети дерева.</p> <p> Любая помощь/предложения приветствуются. Спасибо.</p> <p> РЕДАКТИРОВАТЬ № 1: Теперь мне просто не удается добавить больше учеников к одному советнику.</p>
1 ответ

Вы никогда не добавляете в вектор. Вектор должен добавить элемент, чтобы добавить индекс с помощью оператора [].

+ Изменить

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<</database[i]-></endl;></database.size();>

licensed under cc by-sa 3.0 with attribution.