关于我之前的一个问题的后续问题,已经得到了完美的回答。快速回顾一下,我在创建一个包含巨大数组的类时遇到了麻烦(堆栈溢出错误)。在答案中,一些用户建议我改用 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(无论出于何种原因),并且访问向量元素会导致超出向量边界的立即崩溃。
那么我该怎么做才能做到这一点呢?我曾经在某处读到我可以简单地使用“旧”方法,然后将数组读入向量,但这似乎违背了首先使用向量的目的。