gpt4 book ai didi

C++:从映射文件中读取带有 vector 的结构

转载 作者:行者123 更新时间:2023-11-28 07:37:47 26 4
gpt4 key购买 nike

我目前正在内存中加载大量数据以快速访问它。到现在为止,我把所有东西都放到了 RAM 中。但是现在我的数据变得太大了,我不能再这样做了。因此,我使用的是映射文件。

在此文件中,我存储了音频文件的“音高标记” vector 。

struct udtPitchmark
{
int ByteStart;
int ByteCount;
};

struct udtAudioInfo
{
int ByteStart;
int ByteCount;
vector<udtPitchmark>Pitchmarks;
};

我已经将“udtAudioInfo”的大量 vector 写入了这样的文件:

// Serialize
int iSize = nAudioInfos.Content().size();
fwrite(&iSize,sizeof(int),1,outfile);

vector<udtAudioInfo>::iterator it = nAudioInfos.Content().begin();
for (;it != nAudioInfos.Content().end(); ++it)
{
//we need to know the position that the data will be written to
int iStartPos= ftell( outfile );

fwrite(&it->ByteStart,sizeof(int),1,outfile);
fwrite(&it->ByteCount,sizeof(int),1,outfile);
int len = it->Pitchmarks.size();
fwrite(&len,sizeof(int),1,outfile);

vector<udtPitchmark>::iterator it2 = it->Pitchmarks.begin();
for(;it2 != it->Pitchmarks.end(); ++it2)
{
fwrite(&it2->ByteStart,sizeof(int),1,outfile);
fwrite(&it2->ByteCount,sizeof(int),1,outfile);
}
//and now we need to know the length of the data that was written
int iEndPos= ftell( outfile );
int iLen=(iEndPos-iStartPos);
//now store the file-location info in a map and save this map when we have saved the entire audio info
nMapping.Add (iStartPos,iLen);
}

问题是我是否可以轻松地从映射文件中读取其中一个 udtAudioInfos。我不确定是否可以简单地将此类结构从文件复制到变量。感谢您的帮助。

最佳答案

如果可移植性和特定编译器的实现没有问题,如果某个 vector<> 以您已知的顺序存储其数据,您可以在读取其文件图像时适应它。但是,STL 对象没有指定它们如何存储数据。

如果您创建一个小测试,您将能够轻松地检查 vector 元素的存储方式,并且您将能够自信地从那里开始工作。

关于C++:从映射文件中读取带有 vector 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16392771/

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