gpt4 book ai didi

c++ - 使用 std::ifstream 将结构数据类型的数组加载到 std::vector

转载 作者:行者123 更新时间:2023-11-30 03:10:53 25 4
gpt4 key购买 nike

我正在使用 C++ 开发位图加载器,当从 C 样式数组移动到 std::vector 时,我遇到了一个常见问题,而 Google 似乎没有找到答案。

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

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

我遇到的问题是,当我创建 BGRQuad 结构的 vector 时,我无法再使用 ifstream 读取函数将数据从文件直接加载到 BGRQuad vector 中。

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

有谁知道如何直接读入 vector 而无需创建 C 数组并将数据复制到 BGRQuad vector 中?

最佳答案

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

关于c++ - 使用 std::ifstream 将结构数据类型的数组加载到 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com