gpt4 book ai didi

c++ - 使用 std::istream_iterator 读取最多 N 个值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:30 25 4
gpt4 key购买 nike

如果我确定我的输入流包含 10 个值,我可以读取它们

std::copy_n(std::istream_iterator<T>(input), 10, output);

如果我不知道我有多少值,我可以读取所有值

std::copy(std::istream_iterator<T>(input), std::istream_iterator<T>(), output);

我的问题是如何读取最多 10 个值。我在这里尝试对 I/O 错误保持鲁棒性,但似乎 copy_n 将尝试读取输入的末尾(它不知道它应该停止),并且 copy 不会在 10 个值处停止.我必须推出自己的 copy_at_most 吗?

(嗯,显然对 copy_n 还是有些混淆:std::istream_iterator<> with copy_n() and friends)

最佳答案

遗憾的是,目前通常没有办法限制使用 STL 算法处理的元素的数量。我个人的观点是 std::copy() 应该采用两个范围,这两个范围都由开始和结束分隔。如果无法达到任何一端,则相应的范围将是无限的。也就是说,如果有的话,我会推出我自己的 copy() 算法,如下所示:

template <typename InIt, typename OutIt>
std::pair<InIt, OutIt>
copy(InIt init, InIt inend, OutIt outit, OutIt outend) {
for (; init != inend && outit != outend; ++init, ++outit) {
*outit = *init;
}
return std::make_pair(init, outit);
}

要对付现在的迭代器系统,输出迭代器之间的比较其实是做不到的。因此,输出迭代器的比较实际上需要一些模板编程,以确保永远不会比较实际的输出迭代器,而是返回 true。对于所有其他迭代器类,上述算法应该可以正常工作(假设我没有引入任何拼写错误)。

关于c++ - 使用 std::istream_iterator 读取最多 N 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828771/

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