Asignar dinámicamente memoria a estructura al leer de archivo en C ++

Tengo una estructura

typedef struct student
{
    char name[10];
    int age;
    vector<int> grades;
} student_t;

Y estoy escribiendo su contenido en un archivo binario.

Escribo en diferentes momentos y tengo muchos datos archivados que se escriben desde esta estructura.

Ahora, quiero leer TODOS los datos que se encuentran en el archivo binario en la estructura. No estoy seguro de cómo puedo asignar memoria (dinámicamente) a la estructura para que la estructura pueda acomodar todos los datos en la estructura.

Por favor, ¿me pueden ayudar con esto?

Código:

#include <fstream>
#include <iostream>
#include <vector>
#include <string.h>
#include <stdlib.h>
#include <iterator>

using namespace std;


typedef struct student
{
    char name[10];
    int age;
    vector<int> grades;
}student_t;

int main()
{
    student_t apprentice[3];
    strcpy(apprentice[0].name, "john");
    apprentice[0].age = 21;
    apprentice[0].grades.push_back(1);
    apprentice[0].grades.push_back(3);
    apprentice[0].grades.push_back(5);

    strcpy(apprentice[1].name, "jerry");
    apprentice[1].age = 22;
    apprentice[1].grades.push_back(2);
    apprentice[1].grades.push_back(4);
    apprentice[1].grades.push_back(6);

    strcpy(apprentice[2].name, "jimmy");
    apprentice[2].age = 23;
    apprentice[2].grades.push_back(8);
    apprentice[2].grades.push_back(9);
    apprentice[2].grades.push_back(10);

    // Serializing struct to student.data
    ofstream output_file("students.data", ios::binary);
    output_file.write((char*)&apprentice, sizeof(apprentice));
    output_file.close();

    // Reading from it
    ifstream input_file("students.data", ios::binary);
    student_t master;

    input_file.seekg (0, ios::end);
    cout << input_file.tellg();

    std::vector<student_t> s;

    // input_file.read((char*)s, sizeof(s)); - dint work

    /*input_file >> std::noskipws;
    std::copy(istream_iterator(input_file), istream_iterator(), std::back_inserter(s));*/

    while(input_file >> master) // throws error
    {
        s.push_back(master);
    }
    return 0;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta