Hallo allerseits,
ich habe eine kleine Methode, welche im grunde genommen nicht mehr tun soll, als mehrere std::vector aneinander zu hängen. Dabei läuft in meinem Fall scheinbar irgendetwas grundlegend schief, denn der entstehende Vektor hat weder eine Länge, die der Summe der beiden Ursprungsvektoren entspricht, noch enthält er eine Anzahl an Elementen die seiner Länge entspricht und schließlich sind die Elemente, die enthalten sind irgendwie zusammengewürfelt.
Konkrete Beispiel:
Ich habe vier Vektoren, jeweils zwei sollen aneinandergefügt werden. Die ersten beiden haben eine Größe von 108 und 27 Elementen, die beiden anderen eine Größe von 28 und 30 Elementen. Im ersten Fall erhalte ich am Ende eine Größe von 271, im zweiten Fall eine Größe von 160 Elementen, was beides definitiv falsch ist. Will ich anschließend vollständig über einen der beiden neuen Vektoren iterieren und den Inhalt ausgeben so stürzt das Programm ab.
Mein Quellcode sieht so aus:
Der Fehler entsteht scheinbar hier:
Allerdings ist das ja, soweit ich mich recht entsinne, eigentlich die Standardmethode um zwei Vektoren aneinander zu hängen.
Hänge ich die Vektoren übrigens "manuell" aneinander, d.h. iteriere ich über den zweiten vektor und hänge jeden seiner Werte mit "push_back" an den ersten an, funktioniert alles reibungslos. Allerdings denke ich, dass diese Methode sehr ineffizient ist.
Kann der Fehler evt. daher resultieren, dass "getStudentVector" den "const"-Klassifikator hat (std::vector<Student*> Course::getStudentVector() const)? Wie kann ich das Problem umgehen (ohne den const-Klassifikator entfernen zu müssen)?
Viele Grüße,
Trench
ich habe eine kleine Methode, welche im grunde genommen nicht mehr tun soll, als mehrere std::vector aneinander zu hängen. Dabei läuft in meinem Fall scheinbar irgendetwas grundlegend schief, denn der entstehende Vektor hat weder eine Länge, die der Summe der beiden Ursprungsvektoren entspricht, noch enthält er eine Anzahl an Elementen die seiner Länge entspricht und schließlich sind die Elemente, die enthalten sind irgendwie zusammengewürfelt.
Konkrete Beispiel:
Ich habe vier Vektoren, jeweils zwei sollen aneinandergefügt werden. Die ersten beiden haben eine Größe von 108 und 27 Elementen, die beiden anderen eine Größe von 28 und 30 Elementen. Im ersten Fall erhalte ich am Ende eine Größe von 271, im zweiten Fall eine Größe von 160 Elementen, was beides definitiv falsch ist. Will ich anschließend vollständig über einen der beiden neuen Vektoren iterieren und den Inhalt ausgeben so stürzt das Programm ab.
Mein Quellcode sieht so aus:
Code:
void Faculty::sortStudentsToCourse() {
int numCourses = this->getNumCourses();
std::vector< std::vector<Student*> > courseStudents(4,std::vector<Student*>(0));
for(int i = 0; i < numCourses; i++) {
int courseId = this->getCourse(i)->getCourseId();
if(courseStudents[courseId].empty()) {
courseStudents[courseId] = this->getCourse(i)->getStudentVector();
} else {
courseStudents[courseId].insert(courseStudents[courseId].end(),this->getCourse(i)->getStudentVector().begin(), this->getCourse(i)->getStudentVector().end());
}
}
}
Der Fehler entsteht scheinbar hier:
Code:
courseStudents[courseId].insert(courseStudents[courseId].end(),this->getCourse(i)->getStudentVector().begin(), this->getCourse(i)->getStudentVector().end());
Allerdings ist das ja, soweit ich mich recht entsinne, eigentlich die Standardmethode um zwei Vektoren aneinander zu hängen.
Hänge ich die Vektoren übrigens "manuell" aneinander, d.h. iteriere ich über den zweiten vektor und hänge jeden seiner Werte mit "push_back" an den ersten an, funktioniert alles reibungslos. Allerdings denke ich, dass diese Methode sehr ineffizient ist.
Kann der Fehler evt. daher resultieren, dass "getStudentVector" den "const"-Klassifikator hat (std::vector<Student*> Course::getStudentVector() const)? Wie kann ich das Problem umgehen (ohne den const-Klassifikator entfernen zu müssen)?
Viele Grüße,
Trench
Zuletzt bearbeitet: