// second try: correct but potentially slow
vector<Student_info> extract_fails(vector<Student_info>& students)
{
vector<Student_info> fail;
vector<Student_info>::size_type i = 0;
// invariant:elements [0, i) of students represent passing grades
while (i != students.size())
{
if (fgrade(students[i]))
{
fail.push_back(students[i]};
students.erase(students.begin() + i);
} else
++i;
}
return fail;
}
Приведенный выше код взят из книги «Ускоренный C ++» и рассчитывает пользовательские оценки.Исходя из неудовлетворительной или проходной оценки, результат помещается в вектор fail
для учащихся, которые потерпели неудачу.students
- это вектор, в котором содержится студент, который сдаст
Все хорошо, но когда я изменяю следующую строку с
students.erase(students.begin() + i);
на
students.erase(i);
Я получаю следующую ошибку компилятора:
ошибка: нет соответствующей функции для вызова 'std :: vector, std :: allocator> :: erase (size_t &)'
Хотя я думаю, что они функционально одинаковы.Кто-нибудь может объяснить, что вызывает это?