Cómo leer y analizar correctamente una cadena de enteros de stdin C ++

Justo como dice el título, estoy leyendo en una cadena de enteros de stdin. Los datos que estoy tratando de leer aparecen en el siguiente formulario en un archivo de texto:

3
4
7 8 3
7 9 2
8 9 1
0 1 28
etc...    

Las primeras dos líneas son siempre números simples (¡no hay problemas!) Y las siguientes líneas tienen 3 números. Este archivo se redirige como stdin a mi programa (myprogram <textfile).

¡He intentado tantas cosas pero no he podido hacer esto con éxito! Parece muy simple, pero me mantengo al tanto de dónde (o cómo) debo convertir a un entero. Aquí está mi último intento:

int main()
{

  string str, str1, str2;
  int numCities;
  int numRoads, x, y, z;
  cin >> numCities >> numRoads;

  cout << numCities << " " << numRoads << endl;
  //getline(cin, str1);


  while( getline(cin, str))
  {
    char *cstr;
    cstr = new char[str.size()+1];
    strcpy(cstr, str.c_str());

    x = atoi(strtok(cstr, " ")); //these will be stored in an array or something
    y = atoi(strtok(NULL, " ")); //but right now i just want to at least properly
    z = atoi(strtok(NULL, " ")); //store the appropriate values in these variables!


  }


 return 0;

}

Seguro cuando trato de usar atoi ...

¡Gracias por adelantado!

Respuestas a la pregunta(3)

Su respuesta a la pregunta