c++ - 为什么我需要另一个迭代器作为 std::copy() 中的参数?
问题描述
我不明白为什么我需要在调用中放置另一个迭代器作为第二个参数来std::copy()
读取文件。文件的迭代器“结束”如何结束?
vector<Point> v;
istream_iterator<Point> is(file), end;
copy(is, end, back_inserter(v));
解决方案
文件的迭代器“结束”如何结束?
按照惯例和/或标准库中的设计决定。迭代器end
是默认构造的,在cppreference上,我们了解了默认std:istream_iterator
构造函数:
constexpr istream_iterator();
构造流结束迭代器,对存储的值进行值初始化 [...]
更深层次的推理是,标准算法是围绕半开范围的概念构建的,通常表示为[first, last)
。迭代器is
必须与某种结束标记区分开来last
——否则,std::copy
无法知道何时从输入读取不再有意义(即,何时到达文件末尾)。在你的情况下,这是end
.
推荐阅读
- javascript - 使用 Javascript 获取 ID
- reactjs - React-navigation tabnavigator 在父母状态更改时重新加载
- unit-testing - 由于 BaseController 中的 Null 元素,NUnit 测试失败
- c# - 在 Umbraco 7.7 中处理成员 api 时性能缓慢
- java - 强制包装在 Reactor Flux.using 中抛出的每个函数
- python-3.x - Pyinstaller 无法加载本机模块“Crypto.Cipher.__raw_ecb”
- excel - 如何在excel中查找日期时间是否小于24小时
- javascript - react-big-calendar:无法读取未定义的属性“0”
- cmake - Cmake:CMAKE_C_LINK_EXECUTABLE 变量并添加链接器选项
- mysql - mysql : 使 mysql db 对查询区分大小写