std :: ifstream Verwendung in einer Anordnung von STRUCT-Datentyp in ein std :: vector zu laden,

StackOverflow https://stackoverflow.com/questions/2820646

  •  26-09-2019
  •  | 
  •  

Frage

Ich arbeite an einem Bitmap-Loader in C ++ und wenn sie von dem C-Stil-Feld zu dem std :: vector bewege Ich habe laufen in ein übliches Problem von denen Google scheint nicht die Antwort zu haben.

8 Bit und 4 Bit, Bitmaps enthalten eine Farbpalette. Die Farbpalette hat blau, grün, rot und reservierte Komponenten, die jeweils 1 Byte groß.

// Colour palette     
struct BGRQuad
{
     UInt8 blue; 
     UInt8 green; 
     UInt8 red; 
     UInt8 reserved; 
};

Das Problem, das ich habe, ist, wenn ich einen Vektor der BGRQuad Struktur erzeugen kann ich nicht mehr die ifstream verwendet Lesefunktion zum Laden von Daten aus der Datei direkt in den BGRQuad Vektor.

// This code throws an assert failure!
std::vector<BGRQuad> quads;
if (coloursUsed) // colour table available
{   // read in the colours
    quads.reserve(coloursUsed);
    inFile.read( reinterpret_cast<char*>(&quads[0]), coloursUsed * sizeof(BGRQuad) ); 
}

Wer weiß, wie direkt in den Vektor zu lesen, ohne einen C-Array zu erstellen und mit Kopieren von Daten in die BGRQuad Vektor?

War es hilfreich?

Lösung

Sie müssen quads.resize(coloursUsed) anstelle von quads.reserve(coloursUsed) verwenden. Reserve setzt nur die Kapazität des Objektvektor aber keinen Speicher zuweisen. Resize wird der Speicher tatsächlich zuzuweisen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top