我不明白为什么我需要在std::copy()读取文件的调用中添加另一个迭代器作为第二个参数。文件的迭代器“结束”如何结束?
vector<Point> v;
istream_iterator<Point> is(file), end;
copy(is, end, back_inserter(v));
Run Code Online (Sandbox Code Playgroud)
迭代器“end”如何结束文件?
按照惯例和/或标准库中的设计决策。迭代器end是默认构造的,在cppreference上,我们了解了默认std:istream_iterator构造函数:
Run Code Online (Sandbox Code Playgroud)constexpr istream_iterator();构造流尾迭代器,对存储的值进行值初始化 [...]
更深层的推理是,标准算法是围绕半开范围的概念构建的,通常表示为[first, last)。迭代is器必须与某种结束哨兵区分开来last- 否则,std::copy无法知道何时从输入读取不再有意义(即何时到达文件末尾)。在你的情况下,这是end.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |