后续问题question我已经完全回答了。为了快速回顾一下,我无法创建一个拥有巨大数组的类(堆栈溢出错误)。在答案中,一些用户建议我使用std :: vector来代替。如何在二进制文件上使用fread()将数据读入std :: vector?
功能在数据读取如下:
Test()
{
memset(myarray, 0, sizeof(myarray));
FILE* fstr = fopen("myfile.dat", "rb");
size_t success= fread(myarray, sizeof(myarray), 1, fstr);
fclose(fstr);
}
的myArray的看起来像这样:
int myarray[45000000];
我的问题是:我怎么能看这种成最好:
std::vector<int> myvector;
我搜索谷歌,并找到了多个答案,通常指向下面的代码:
std::ifstream input("myfile.dat", std::ios::in | std::ifstream::binary);
std::copy(std::istream_iterator<int>(input),
std::istream_iterator<int>(),
std::back_inserter(myvector));
实施之后,并调用myvector.size()时,我得到16(无论何种原因),并访问向量元素会导致立即死机走出去的矢量界。
那么我该怎么做才能做到这一点?我曾经在某处读过我可以简单地使用“旧”方法,然后将数组读入向量中,但这似乎无法摆脱首先使用该向量的目的。
'istream_iterator'格式化输入。如果你的文件是二进制格式,那不是你想要的。 – jrok 2013-02-28 19:11:02
@MichaelDorgan:根本不读这个问题的方法。 @MarkAnderson:'std :: istream_iterator'_formatted_读取,旧'fread'是_unformatted_读取。您需要对矢量进行无格式读取。 –
2013-02-28 19:11:45
然后走开我的评论 - 我更多的C家伙反正:) – 2013-02-28 19:13:17