使用std :: ifstream的在结构数据类型的数组加载到一个std ::矢量
题
我工作的C ++中的位图加载器和从C风格阵列移动到STD时::矢量我所遇到的问题通常谷歌似乎其中不具有问题的答案。
8位和4位,位图包含一个调色板。调色板有蓝色,绿色,红色和保留的部件在尺寸上各1个字节。
// Colour palette
struct BGRQuad
{
UInt8 blue;
UInt8 green;
UInt8 red;
UInt8 reserved;
};
我遇到的问题是,当我创建BGRQuad结构的矢量I可以不再使用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矢量?
解决方案
您需要的地方quads.resize(coloursUsed)
的使用quads.reserve(coloursUsed)
。储备仅设置矢量对象的容量,但不分配内存。调整大小将实际分配内存。
不隶属于 StackOverflow