我工作的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)。储备仅设置矢量对象的容量,但不分配内存。调整大小将实际分配内存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top