std :: STDに構造体データ型の配列における負荷にはifstream ::ベクトルを用いて

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

  •  26-09-2019
  •  | 
  •  

質問

私はC ++でのビットマップローダーでの作業とstdにCスタイルの配列から移動するときにしています::ベクトル私はGoogleが答えを持っていないようその通常の問題に遭遇しています。

8ビットおよび4ビット、ビットマップは、カラーパレットを含みます。カラーパレットのサイズはそれぞれ1バイト、青、緑、赤及び予約成分を有する。

// Colour palette     
struct BGRQuad
{
     UInt8 blue; 
     UInt8 green; 
     UInt8 red; 
     UInt8 reserved; 
};
私は、もはやはifstreamを使用することができますBGRQuad構造のベクトルを作成するときに

私が午前問題があるファイルから直接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) ); 
}

んC配列を作成することなく、ベクターに直接読み込むとBGRQuadベクターにデータをコピーする方法を誰も知っていますか?

役に立ちましたか?

解決

あなたはquads.resize(coloursUsed)の代わりにquads.reserve(coloursUsed)を使用する必要があります。保護区は、単にベクトルオブジェクトの容量を設定しますが、メモリを割り当てません。サイズ変更は、実際にメモリを割り当てます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top