Вы можете использовать remove_if из алгоритма std ::, но функтор должен возвращать людей, которые не прошли (f_not_grade), вместо людей, которые прошли:
std::remove_if(students.begin(), students.end(), f_not_grade)
Или вы можете посмотреть способ отрицания функтора здесь или здесь , чтобы использовать функцию f_grade без изменений и remove_if.
Большинство обычных операций с контейнерами реализованы в STL, поэтому используйте силу языка !. Поиск такого рода функций заставляет нас кодировать все меньше и меньше.
Отредактировано для удаления неправильной "()".