Como ler e analisar corretamente uma cadeia de inteiros de stdin C ++

Assim como o título diz, eu estou lendo em uma string de inteiros de stdin. Os dados que estou tentando ler aparecem na seguinte forma em um arquivo de texto:

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

As duas primeiras linhas são sempre números únicos (sem problemas!) E as linhas seguintes têm 3 números. Este arquivo é redirecionado como stdin para o meu programa (myprogram <textfile).

Eu tentei muitas coisas, mas não consegui fazer isso com sucesso! Parece tão simples, mas eu continuo tropeçando em onde (ou como) eu deveria converter para um inteiro. Aqui está minha última tentativa:

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;

}

Eu segfault quando tento usar o atoi ...

Desde já, obrigado!

questionAnswers(3)

yourAnswerToTheQuestion