首页 > 解决方案 > 为什么我需要另一个迭代器作为 std::copy() 中的参数?

问题描述

我不明白为什么我需要在调用中放置另一个迭代器作为第二个参数来std::copy()读取文件。文件的迭代器“结束”如何结束?

    vector<Point> v;
    istream_iterator<Point> is(file), end;
    copy(is, end, back_inserter(v));

标签: c++stliterator

解决方案


文件的迭代器“结束”如何结束?

按照惯例和/或标准库中的设计决定。迭代器end是默认构造的,在cppreference上,我们了解了默认std:istream_iterator构造函数:

constexpr istream_iterator();

构造流结束迭代器,对存储的值进行值初始化 [...]

更深层次的推理是,标准算法是围绕半开范围的概念构建的,通常表示为[first, last)。迭代器is必须与某种结束标记区分开来last——否则,std::copy无法知道何时从输入读取不再有意义(即,何时到达文件末尾)。在你的情况下,这是end.


推荐阅读