我发现我们可以将文件的内容读取到std :: vector中,如下所示:
ifstream fin(..., ios::in);
std::vector<char> buf(
std::istreambuf_iterator<char>(fin),
std::istreambuf_iterator<char>());
[这种方法是否会像我多次调用buf.push_back();
那样引起大量的内存重新分配?将文件读入std::vector
的最快或最佳方法是什么?
std::istreambuf_iterator
是输入迭代器,因此开始和结束之间的距离是未知的。除非文件很小,否则在构造函数期间将进行一些重新分配。对于随机访问迭代器,距离是已知的,在这种情况下,构造函数可以避免额外的内存分配。
向量保持顺序分配的数据。当添加一个新元素时,它可能在最后一个元素之后没有可用的内存,因此它需要将所有数据移动到内存中有足够空间容纳新旧数据的位置。