gpt4 book ai didi

c++ - 这种方法是否会涉及内存重新分配,从而影响其效率?

转载 作者:行者123 更新时间:2023-12-01 14:48:38 25 4
gpt4 key购买 nike

我发现我们可以像这样将文件的内容读入 std::vector 中:

  ifstream fin(..., ios::in);
std::vector<char> buf(
std::istreambuf_iterator<char>(fin),
std::istreambuf_iterator<char>());

这种方法会不会像我调用 buf.push_back(); 那样导致大量内存重新分配?很多次?将文件读入 std::vector 的最快或最佳方法是什么? ?

编辑:
顺便说一句,我发现有一种方法可以将文件读入字符串流:
stringstream ss;
ifstream fin(..., ios::in);
fin >> ss.rdbuf();

这种方法会不会有同样的内存重新分配问题?

最佳答案

std::istreambuf_iterator 是一个输入迭代器,所以开始和结束之间的距离是事先不知道的。除非文件非常小,否则在构造函数期间会有几次重新分配。对于随机访问迭代器,距离是已知的,在这种情况下,构造函数可以避免额外的内存分配。

如果你大致知道文件的大小,可以使用 reserve() 读之前:

std::vector<char> buf;
buf.reserve(file_size);
buf.insert(buf.end(), std::istreambuf_iterator<char>(fin),
std::istreambuf_iterator<char>());

关于c++ - 这种方法是否会涉及内存重新分配,从而影响其效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60485133/

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