使用istream从文件读取int数据

时间:2017-11-30 08:52:52

标签: c++ stl stream

ifstream dataFile("ints.dat");

istream_iterator<int> dataBegin(dataFile);
istream_iterator<int> dataEnd;

list<int> data(dataBegin, dataEnd);

我在C ++ STL中有上面的代码。

以上代码正在运作。

我们正在创建开始和结束迭代器作为数据开始和数据结束。但dataEnd与数据文件无关。列表如何知道范围?

1 个答案:

答案 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>中重载。