Я пишу для класса реализацию игры жизни Конвея в тороиде. Функция cargarToroide
(loadToroid) должна загружать из файла в вектор соответствующий статус (живой или мертвый - True или False - 1 или 0) каждой ячейки (celda
), ее подпись выглядит следующим образом:
toroide cargarToroide(string nombreArchivo, bool &status);
nombreArchivo
- это имя файла, а status
должно быть равно false, если есть какие-либо проблемы с загрузкой файла или в формате файла.
Структура данных определяется следующим образом (я не могу ее изменить):
typedef vector< vector<bool> > toroide;
файл структурирован так:
numberOfLines numberOfColums
list of the values of the cells
number of live cells
Например:
4 4
1 0 0 0
0 0 1 0
0 0 0 1
0 1 0 0
4
Дело в том, что я не могу найти способ заставить это работать. Я читал в Интернете, что у vector<bool>
есть проблемы, когда вы пытаетесь загрузить его обычным способом, и это было первое, что я пробовал.
toroide cargarToroide(string nombreArchivo, bool &status)
{
toroide t;
ifstream fi (nombreArchivo);
int cantidadFilas, cantidadColumnas;
int celda;
if(!fi){
status = false;
}
fi >> cantidadFilas;
fi >> cantidadColumnas;
for(int i = 0; i < cantidadFilas; i++) {
for (int j = 0; j < cantidadColumnas; j++) {
fi >> celda;
if(celda == 1) {
t[i].push_back(true);
}
else if(celda == 0){
t[i].push_back(false);
}
else{
status = false;
return t;
}
}
}
return t;
}
Я также пытался определить celda
как логическое значение и просто использовать
t[i].push_back(celda);
Как лучше всего подойти к этому, используя C ++ 11?