Utilizzando std :: ifstream caricare in un array del tipo di dati in una struct std :: vector

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

  •  26-09-2019
  •  | 
  •  

Domanda

Sto lavorando su un caricatore bitmap in C ++ e quando si sposta dalla matrice stile C alla std :: vector ho incontrato un problema di solito di cui Google non sembra avere la risposta.

8 bit e 4 bit, bitmap contiene una tavolozza di colori. La tavolozza dei colori è blu, verde, rosso e componenti riservati ogni 1 byte di dimensione.

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

Il problema che sto avendo è quando creo un vettore di struttura BGRQuad non posso più utilizzare la funzione di lettura ifstream per caricare i dati dal file direttamente nel vettore BGRQuad.

// 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) ); 
}

Qualcuno sa come leggere direttamente nel vettore senza dover creare un array di C e copiare i dati nel vettore BGRQuad?

È stato utile?

Soluzione

È necessario utilizzare quads.resize(coloursUsed) al posto di quads.reserve(coloursUsed). Riserva solo imposta la capacità dell'oggetto vettore ma non alloca memoria. Resize effettivamente allocare la memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top