Как я могу переписать цикл, чтобы использовать сопоставляется массив c++
Массив настраивается с помощью:
class Roster { public: void add(string studentID, string firstName, string lastName, string email, int age, int daysInCourse1, int daysInCourse2, int daysInCourse3, Degree degreeProgram); void printAll(); void printByDegreeProgram(int degreeProgram); void printDaysInCourse(string studentID); void printInvalidEmails(); void remove(string studentID); ~Roster(); std::map<string, shared_ptr<Student> > classRosterArray; };
void Roster::printAll() { for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) { classRosterArray[i]->print(); } } void Roster::printByDegreeProgram(int degreeProgram) { for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) { if (classRosterArray[i]->fetchDegreeProgram() == degreeProgram) { classRosterArray[i]->print(); } } } void Roster::printDaysInCourse(string studentID) { float avg = 0; int max = 3; for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) { if (classRosterArray[i] != nullptr && classRosterArray[i]->fetchStudentId() == studentID) { int *daysInCourse = classRosterArray[i]->fetchDaysInCourse(); for (int x = 0; x < max; x++) { avg += daysInCourse[x]; } cout << "Student " << classRosterArray[i]->fetchStudentId() << "'s average number of days in each course is." << (avg / max) << "\n"; break; } } } void Roster::printInvalidEmails() { for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) { string email = classRosterArray[email]->fetchEmail(); bool isValid = false; size_t found = email.find("@"); if (found != string::npos) { found = email.find("."); if (found != string::npos) { found = email.find(" "); if (found == string::npos) { isValid = true; } } } if (!isValid) { cout << email << " is not a valid email address \n"; } } }
Что я уже пробовал:
Первоначально он был настроен как массив, инициализированный nullptrs, который не работает в C++, как оказалось, для циклов прямого сравнения. Поэтому по чьему-то совету я переключился на карту, которая исправила одну из моих проблем, но позже сломала циклы classarray, и я точно не знаю, как их переписать, чтобы компенсировать это.
Любая помощь которую вы ребята можете оказать будет очень признательна
jeron1
что-то вроде этого?
for (int i = 0; i < classRosterArray.size(); i++)
{...
}
или попробуйте итераторы, что-то вроде,
Для (с std::карта::итератор IT = classRosterArray.начать(); к != classRosterArray.конец(); ++это)
{
...
}