使用istream从文件中读取int数据 ifstream数据文件(“ints.dat”); istream_迭代器数据域(数据文件); istream_迭代器数据端; 列表数据(dataegin,dataEnd); 我在C++ STL中有上面的代码.< /P>

使用istream从文件中读取int数据 ifstream数据文件(“ints.dat”); istream_迭代器数据域(数据文件); istream_迭代器数据端; 列表数据(dataegin,dataEnd); 我在C++ STL中有上面的代码.< /P>,c++,stl,stream,C++,Stl,Stream,以上代码正在运行 我们正在创建begin和end迭代器作为数据开始和数据结束。但dataEnd与数据文件无关。列表如何知道范围?通常将其视为std::istream\u迭代器eos,例如在的示例中,但在您的情况下,您选择的名称可能更适合 这类似于EOF,对于标准输入,文件末尾表示要读取的最后一个元素后面的1 eos类似于最后一个迭代器,它表示要读取的最后一个元素后面的1 它类似于EOF,但正如您看到的不同。例如,您将流的末尾命名为什么实际上并不重要。在我上面提供的链接中,有一个可能的实现,如果您

以上代码正在运行


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

通常将其视为
std::istream\u迭代器eos,例如在的示例中,但在您的情况下,您选择的名称可能更适合

这类似于
EOF
,对于标准输入,文件末尾表示要读取的最后一个元素后面的1

eos
类似于最后一个迭代器,它表示要读取的最后一个元素后面的1

它类似于
EOF
,但正如您看到的不同。例如,您将流的末尾命名为什么实际上并不重要。在我上面提供的链接中,有一个可能的实现,如果您愿意,您可以研究它

此外,还提到:

默认构造的std::istream_迭代器称为 流结束迭代器。当有效的std::istream_迭代器到达 在基础流的末尾,它将变为与流的末尾相等 迭代器。取消引用或增加它会进一步调用undefined 行为

从中,我们有:

这些运算符在标头中重载


dataEnd
想象成一个美化了的EOF常量,你给流的末尾起什么名字其实并不重要。在OP示例的上下文中,我更喜欢名称
dataEnd
而不是
eos
,因为它更明显地与它所标记的内容相关
ifstream dataFile("ints.dat");

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

list<int> data(dataBegin, dataEnd);