2014-12-21 80 views
0

这里挺新的。 需要从一个复杂的容器输出值! 这些类在下面给出。列表指针类的输出向量

class CourseClass 
{ 
private: 

    Professor* _professor; // Profesor who teaches 

    Course* _course; // Course to which class belongs 

    list<StudentsGroup*> _groups; // Student groups who attend class 

    int _numberOfSeats; // Number of seats (students) required in room 

    bool _requiresLab; // Initicates wheather class requires computers 

    int _duration; // Duration of class in hours 

public: 

    // Initializes class object 
    CourseClass(Professor* professor, Course* course, const list<StudentsGroup*>& groups, 
     bool requiresLab, int duration); 
... 
} 

class Professor 
{ 

private: 

    int _id; // Professor's ID 

    string _name; //Professor Name 

    list<CourseClass*> _courseClasses; // List of classes that professor teaches 

public: 
    // Initializes professor data 
    Professor(int id, const string& name); 
... 
} 

class Course 
{ 
private: 

    int _id; // Course ID 

    string _name; // Course name 

public: 

    // Initializes course 
    Course(int id, const string& name); 
... 
} 

class StudentsGroup 
{ 
private: 

    int _id; // Student group ID 

    string _name; // Name of student group 

    int _numberOfStudents; // Number of students in group 

    list<CourseClass*> _courseClasses; // List of classes that group attends 

public: 

    // Initializes student group data 
    StudentsGroup(int id, const string& name, int numberOfStudents); 

... 
} 

下面的向量是我想要输出的,我将如何设计循环?

vector < list < CourseClass* > > _slots; 
+3

为什么_groups包含一个指向类,而不是价值?事实上,为什么对于所有这些成员变量都是如此? – IdeaHat

+0

...不确定我关注。这些值稍后从config.dat文件中取出并存储在容器中,猜测指针用于引用不同的一组值。 –

回答

2

在C++ 11:

for(const auto& course_list : _slots) 
{ 
    for(CourseClass* p: course_list) 
    { 
    do_something_with(*p); 
    // or p->do_something(); 
    } 
} 

在C++ 03是比较繁琐:

typedef list<CourseClass*> ClassList; 
typedef vector<ClassList> ClassListVector; 

ClassListVector::const_iterator slot = _slots.begin(); 
ClassListVector::const_iterator last_slot = _slots.end(); 
for(; slot != last_slot ; ++slot) 
{ 
    const ClassList& myClassList = *slot; 
    ClassList::const_iterator class = myClassList.begin(); 
    ClassList::const_iterator class_end = myClassList.end(); 
    for(; class != class_end ; ++class) 
    { 
    CourseClass* p = *class; 
    do_something_with(p); 
    } 
} 
+0

非常感谢! XD –