У меня проблема с чтением из файла и сохранением в 2D-векторе. Это функция, писать на файл:Чтение целых чисел из файла и сохранение его в 2D-векторе
void create_input (int num_frames, int height, int width)
{
ofstream GridFlow;
GridFlow.open ("GridDB");
for (int i = 0; i < num_frames; i++)
{
for (int j = 0; j < height; j++)
{
for (int k = 0; k < width; k++)
{
GridFlow << setw(5);
GridFlow << rand() % 256 << endl;
}
}
}
GridFlow.close();
}
Это просто записывает случайное число для каждой строки (высота * ширина * num_frames) число раз. Как это:
3
74
160
78
15
30
127
64
178
15
107
То, что я хочу сделать, это прочитать обратно из файла и сохранять различные куски файла (ширина * высота) в разных кадрах. Я пытался это сделать, но программные блоки без ошибок:
vector<Frame> movie;
movie.resize(num_frames);
for (int i = 0; i < num_frames; i++)
{
Frame frame;
int offset = i*width*height*6;
vector<vector<int>>tmp_grid(height, vector<int>(width, 0));
ifstream GridFlow;
GridFlow.open ("GridDB");
GridFlow.seekg(offset, GridFlow.beg);
for (int h = 0; h < height; h++)
{
for (int g = 0; g < width; g++)
{
int value;
GridFlow >> value;
tmp_grid[h][g] = value;
}
}
frame.grid = tmp_grid;
movie[i] = frame;
}
я использовал смещение, каждый раз, когда умножается на 6 (количество байт * строки), чтобы начать чтение, кадровая структура только 2D-вектор для хранения значений. Я должен сделать это со смещением, потому что следующий шаг будет выполнять эту многопоточность, каждый поток знает, что число кадров должно вычислять смещение вправо, чтобы начать чтение и хранение.
без ошибок, брошенные, ничего? – Vtik
Off topic: Рекомендуем писать двоичные файлы, а не текст в файл. Значительно меньший файл (6x), легче прогнозировать границы (но вы отлично справились с этой задачей, ограничивая границы), и вам не придется преобразовывать текст в целое. Должно получиться большое ускорение скорости, потому что вы можете сосать весь файл в один большой массив байтов за один снимок, а затем разбить массив на потоки. – user4581301
В любом случае, блок или занятый спин должны быть легкой проблемой для обнаружения отладчик, который пришел с вашей средой разработки. – user4581301