有什么区别istreambuf_iterator
and istream_iterator
.
-
对于以下代码:
istream_iterator<int> cin_in(cin);
istream_iterator<int> end;
迭代器在哪里end
指向?
迭代器会与流绑定吗?
如果我写代码
istream_iterator<int>()
是一样吗end
?
这些都记录在哪里?
有什么区别istreambuf_iterator
and istream_iterator
.
std::istream_iterator
是一个用于格式化提取的迭代器。例如,如果文件中有一行整数并希望将它们复制到某个容器中,则可以使用std::istream_iterator<int>
它在内部将复制从 a 中提取的值int
(using operator>>()
) 到容器:
std::copy(std::istream_iterator<int>(file),
std::istream_iterator<int>(), std::back_inserter(some_container));
std::istreambuf_iterator
是用于无格式提取的迭代器。它直接作用于std::streambuf
通过其构造函数提供的对象。因此,如果您只需要文件的内容而不用担心其格式,请使用此迭代器。例如,有时您想将整个文件读入字符串或某个容器中。常规格式的提取器将丢弃前导空格并转换提取的标记;缓冲区迭代器不会:
std::string str(std::istreambuf_iterator<char>{file}, {});
迭代器的终点指向哪里?
默认构造的流迭代器只是一个特殊的哨兵对象,表示流的结尾。由于 IOStream 是一次性的,因此在我们读取到这一点之前,它无法实际指向末尾。在内部,当提取失败或读取到达文件末尾时,使用流(或流缓冲区)构造的迭代器将更改为结束流迭代器。这有助于标准算法与流迭代器一起工作,因为它们的行为就像外部的常规迭代器一样。
这些都记录在哪里?
不少地方。正式纳入标准。您还可以找到有关的文档参考参数 http://en.cppreference.com.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)