gpt4 book ai didi

c++ - copy_n 还是直到eof?

转载 作者:可可西里 更新时间:2023-11-01 18:39:45 28 4
gpt4 key购买 nike

我如何使用 STL 算法来做到这一点?

std::ifstream file(filename);

std::vector<unsigned char> buf;
for(auto file_it = std::istreambuf_iterator<char>(file); file_it != std::istreambuf_iterator<char>() && buf.size() < 2048; ++file_it)
buf.push_back(*file_it);

备注buf.size() < 2048 .

例如如果我执行以下操作并且文件小于 2048 字节,会发生什么情况?

std::copy_n(std::istreambuf_iterator<char>(file), 2048, std::back_inserter(buf));

最佳答案

如文档所述,std::copy_n()完全复制n项目。它将继续读取迭代器引用的序列的末尾。我不确定标准对 istreambuf_iterator<> 说了什么, 尽管。这可能是未定义的行为,但流很可能会产生大量 eof() 的拷贝过了尽头。当少于 2048 时,这可能会导致大量垃圾。可用字节数。

无论如何,如果您想可靠地复制 n项,您需要编写自己的函数:

template<typename I1, typename I2, typename size_type>
I copy_upto_n ( I1 begin, I1 end, size_type n, I2 out )
{
for (size_type i=0; (i < n) && (begin != end); ++i)
{
*out++ = *begin++;
}
return out;
}

有些人可能会使用 std::iterator_traits<>而不是额外的模板参数来强制使用与迭代器相同的距离类型。

关于c++ - copy_n 还是直到eof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379469/

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