使用std :: ifstream将struct数据类型的数组加载到std :: vector中

时间:2010-05-12 16:10:40

标签: c++ vector ifstream

我正在使用C ++中的位图加载器,当从C样式数组转移到std :: vector时,我遇到了谷歌似乎没有答案的常见问题。

8位和4位,位图包含调色板。调色板具有蓝色,绿色,红色和保留组件,每个大小为1个字节。

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

我遇到的问题是当我创建BGRQuad结构的向量时,我不能再使用ifstream读取函数将文件中的数据直接加载到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矢量中?

1 个答案:

答案 0 :(得分:3)

您需要使用quads.resize(coloursUsed)代替quads.reserve(coloursUsed)。 Reserve仅设置矢量对象的容量,但不分配内存。调整大小实际上会分配内存。