ifstream dataFile("ints.dat");
istream_iterator<int> dataBegin(dataFile);
istream_iterator<int> dataEnd;
list<int> data(dataBegin, dataEnd);
我在C ++ STL中有上面的代码。
以上代码正在运作。
我们正在创建开始和结束迭代器作为数据开始和数据结束。但dataEnd与数据文件无关。列表如何知道范围?
答案 0 :(得分:4)
通常会将其视为std::istream_iterator<int> eos;
,例如在ref的示例中,但在您的情况下,您选择的名称可能会更好配合。
它类似于EOF
,对于标准输入,文件结尾表示在最后一个要读取的元素之后的1。
eos
类似于最后一个迭代器,它表示要读取的最后一个元素之后的1。
它类似于EOF
,但你看到的不一样。例如,您为流的结尾命名的内容确实无关紧要。在我上面提供的链接中,有一个可能的实现,如果你愿意,你可以学习。
此外,cpprefernce提及:
默认构造的std :: istream_iterator被称为 end-of-stream 迭代器。当有效的std :: istream_iterator到达时 在底层流的末尾,它变得等于流的末尾 迭代器。取消引用或递增它会进一步调用undefined 行为。
来自cplusplus,我们有:
这些运算符在标题
<iterator>
中重载。