Utilizando el vector de objetos de tipo de clase definidos por el usuario

Trabajando en la resolución de un problema simple en C ++, quiero entender cómo podría usar el vector de objetos del tipo de clase definido por el usuario sin un número fijo (el peor de los casos) de elementos asignados al crear instancias de ese vector de objetos. es decir

Actualmente tengo que usar

vector<grades> students(10000); 

where 10000 es un valor máximo de registros que he asumido. si algún archivo tiene más registros, obviamente se bloquea.

Entonces, en el caso del código a continuación, cómo hacer crecer el vector de mis objetos de clase dinámicamente y leer los registros en mis variables de clase. No puedo usar push_back (), como se explica en el código a continuación. ¿O cómo puedo usar push_back ()?

El código a continuación debería explicar -

class grades
{
public:
    string mName;
    string mSurname;
    int mAge;
    string mLocation;
    int mMarks;
    char mGrade;

    //void readdata();
    void calcgrade();
    void showgrade(string name_surname);

};

    using namespace std;
    int main(int argc,char *argv[])
    {
        **vector<grades> students(10000);// I do not want to do this but make it dynamic**
        ifstream infile;
        char c;
        int i=0;
        int no_of_records=0;

        infile.open(argv[1],ios::in);
        if(infile.is_open() != true)
        {
            cerr << "Error opening input data file:" <<argv[1] << "...exiting\n";
            exit(-1);
        }

            while(!infile.eof()) 
            {
                 infile >> students[i].mName;//Can i use push_back() here and for reading all below entities, to make vector grow dynamically
                infile >> students[i].mSurname;
                infile >> students[i].mAge;
                infile >> students[i].mLocation;
                infile >> students[i].mMarks;
                i++;
                no_of_records++;
            }

            for(i=0;i<no_of_records;i++)
            {
               //Do some functions on each object students[i] in the vector 
            }
}

FYI: - Leí un archivo de texto en C ++ que tiene entradas como se muestra a continuación (El orden de las entidades y el número de diferentes tipos de entidades en una fila es fijo, lo sé, pero el número de filas puede variar según el archivo de entrada diferente leer):

Name1 Surname1 Course1 Marks1
Name2 Surname2 Course2 Marks2
Name3 Surname3 Course3 Marks3
...
...

EDIT: código para manejar todo tipo de espacios espurios, pestañas en entidades de registros

while(!infile.eof()) 
    {
        c=infile.get();     
        if(isalnum(c))
        {
            infile.seekg(-1,ios::cur);
        }

        if(isalnum(c))
        {
            grades stud_temp;

            infile >> stud_temp.mName;
            infile >> stud_temp.mSurname;
            infile >> stud_temp.mAge;
            infile >> stud_temp.mLocation;
            infile >> stud_temp.mMarks;         
            students.push_back(stud_temp);          
        }
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta