我正在为我的系统编程课程做作业。 我必须实施大学模拟。 我有一个课程抽象类,以及ComputerScienceCourse的子类(以及一些其他不影响我要问的子类)。 我有一个学生抽象类,以及它的子类ComputerScienceStudent(和一些其他子类不影响我要问的内容)。 在ComputerScienceCourse子类中有一个函数:
void teach(){
for(i = all students that take this course [stored in a vector of pointers to Student objects, which is a member field of the CSCourse child class, called students]){
this->students.at(i)->study(*this);
}
}
此功能为所有参加此课程的学生调用学习功能。该函数是子类CSStudent
的成员函数void study(Course &c){
if(this->failedclass){
c.removeStudent(this)
}
}
现在当我检查输出时,教学功能中的循环不会为所有学生调用学习功能。 例如,如果我有4名学生参加这门课程,有时它只会调用前三名的学习功能,有时它会调用第一名和最后一名学生的功能......各种各样。 什么可能导致for循环不调用所有学生学习功能?! 这是教学功能的完整代码:
for(unsigned int i=0; i<this->studentMembers.size(); i++){
this->studentMembers.at(i)->study(*this);
}
答案 0 :(得分:1)
问题似乎是当学生课程失败时,矢量的内容会被修改。在迭代其内容时从向量中删除东西是很难的。看起来像一个更合适的数据模型,这里教师会删除失败的学生,这也会使这个问题更容易处理。所以教大家,然后再次浏览列表以删除失败的学生。