2014-02-19 2 views
-1

im пытается создать программу, которая получает бесконечных учеников и бесконечное название курса для каждого ученика, а затем печатает их следующим образом:Создание класса и создание объекта для класса, который является вектором и строкой (вектор <string>)

 
student 1: 
coursename1 
coursename2 
.... 
student2: 
coursename1 
coursename2 
.... 

, но я не знаю, как делать какие-либо из выше, пожалуйста, помогите

+4

Infinite? В самом деле? –

+0

он выглядит новым для C++ – Victor

+0

Вопрос о домашнем задании? – Xarn

ответ

0

Вам даже не нужно, чтобы создать свой собственный класс, чтобы сделать это. Узнайте, как использовать std:vector, который представляет собой последовательность контейнер, который инкапсулирует динамические массивы размера ..

Вы можете попробовать следующую структуру данных:

vector<string> names; 
vector<vector<string>> courses; 

Или просто:

vector<pair<string, vector<string>>> names_and_courses; 
      ^^^^^^ ^^^^^^^^^^^^^ 
       |   | 
      names  courses 
1

Если вы хотите для обеспечения дополнительных операций для пользователей или для управления пользователями вам необходимо создать класс, подобный этому:

class student 
{ 
private: 
    string m_name; 
    vector<string> m_courses; 
public: 
    student() : m_name(), m_courses() { } 
    student(string name) : m_name(name), m_courses() { } 
    vector<string> get_courses(); 
    vector<string> &add_course(string course_name); 
    vector<string> &remove_course(string course_name); 
    vector<string> &remove_course(int course_index); 
    string get_name() const; 
}; 

и для создания students_manager класса, вы можете написать класс коллекции:

class students_mgr 
{ 
private: 
    vector<student> m_students; 
public: 
    students_mgr(); 
    students_mgr(vector<student> &students); 
    void add_student(student &s); 
    void add_student(string student_name); 
    void remove_student(student &s); 
    void remove_student(string student_name); 
    void remove_student(int student_index); 
}; 

Я также написал некоторые из реализаций методов, чтобы дать вам отправную точку:

vector<string> &student::add_course(string course_name) 
{ 
    // check if the student is already in a course_name 
    for(auto it = m_courses.begin(); it != m_courses.end(); ++it) 
    { 
    if(*it == course_name) return this->m_courses; 
    } 

    this->m_courses.push_back(course_name); 
    return this->m_courses; 
} 
+0

Вам не удалось найти тип возвращаемого типа 'add_course' ... – Griwes

+0

Да, теперь я вижу. Вчера я очень устал, и я написал его в спешке – Victor

0

Другие ответы велики, но что-то более простое может включать struct и несколько циклов. Подумайте о каждом ученике с именем и списком (ака-вектором) курсов.

struct student{ 
    string name; 
    vector<string> courses; 
}; 

В вашем основном методе вы хотите что-то, что будет держать «бесконечный» список студентов, как вектор студента типа, возможно, названными студенты (vector<student> students).

Я дам вам понять, петлю и пользовательский ввод проверку, но я бы рекомендовал следующее:

student s; //gives you a 'student' to work with 
s.name = "student name"; //how to assign a name to the student 
s.courses.push_back("course name"); //this is how you access the student's courses and add them 

После того как вы имя и курсовую информацию студента, вам необходимо добавить студент к отдельному бесконечному списку. Вы сделаете это, позвонив по телефону:

students.push_back(s); 

Этого должно быть достаточно, чтобы вы начали. Пожалуйста, не стесняйтесь задавать любые последующие вопросы. Я бы рекомендовал этот учебник по адресу Structures и эту документацию по адресу Vector

Смежные вопросы