Ich habe ein Problem beim Lesen aus einer Datei und beim Speichern in einem 2D-Vektor. Dies ist die Funktion, die auf die Datei schreiben:Ganzzahlen aus einer Datei lesen und in einem 2D-Vektor speichern
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();
}
, die einfach eine Zufallszahl für jede Zeile schreibt (Höhe * Breite * num_frames) Anzahl. Wie folgt aus:
3
74
160
78
15
30
127
64
178
15
107
Was möchte ich tun, ist wieder aus der Datei zu lesen und verschiedene Stücke der Datei (Breite * Höhe) in verschiedenen Rahmen zu speichern. Ich habe versucht, dies ohne Fehler aber die Programmbausteine zu tun:
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;
}
Ich habe ein Offset verwendet, dass jedes Mal um 6 (Anzahl der Bytes * line) multipliziert wird, der Struktur-Rahmen zu lesen beginnt, ist nur ein 2D-Vektor zum Speichern der Werte. Ich muss dies mit dem Offset tun, da der nächste Schritt dieses Multithreading sein wird, jeder Thread, der die Nummer des Frames kennt, sollte den richtigen Offset berechnen, um mit dem Lesen und Speichern zu beginnen.
keine Fehler geworfen, nichts? – Vtik
Off topic: Empfehlen Sie, Binärdatei, nicht Text in die Datei zu schreiben. Viel kleinere Datei (6x), einfacher, Grenzen vorherzusagen (aber Sie haben hier einen großen Job gemacht, Grenzen zu begrenzen), und Sie müssen nicht von Text zu Integer konvertieren. Sollten Sie einen großen Geschwindigkeitsschub bekommen, weil Sie die ganze Datei in einem großen Array von Bytes in einem Schuss saugen und dann das Array unter Threads partitionieren können. – user4581301
Wie auch immer, ein Block oder Busy-Spin sollte ein leichtes Problem sein der Debugger, der mit Ihrer Entwicklungsumgebung geliefert wurde. – user4581301