c++ - 在函数中传递 ifstream 迭代器
问题描述
为什么这段代码有效?e
迭代器没有点分配给任何东西。如何暗示函数会一直持续到 fstream 结束?
#include <vector>
#include <iostream>
#include <list>
#include <fstream>
#include <string>
#include <iterator>
using namespace std;
template<typename InputIterator>
void printRange(InputIterator first, InputIterator last)
{
while (first != last)
{
std::cout << *first << endl;
++first;
}
}
int main()
{
vector<int> v = { 11, 24, 541 };
printRange(v.begin(), v.end());
cout << endl;
list<double> lst = { 11.88, 21.4, 541.9 };
printRange(lst.begin(), lst.end());
cout << endl;
ifstream ifs{ "strings.txt" };
istream_iterator<string> i(ifs);
istream_iterator<string> e;
printRange(i, e);
}
字符串.txt
coding c++
解决方案
该变量e
是默认构造的,因此调用了 0 参数构造函数。从文档中:
constexpr istream_iterator();
构造流结束迭代器。
std::is_trivially_default_constructible_v<T>
如果为真,则此构造函数为 constexpr 。
因此,默认构造一个istream_iterator
构造流结束迭代器,这正是您需要的值。
推荐阅读
- python - Swagger-ui 中的参数排序
- c# - 在位置列出文件
- java - 为 DialogFlow Java API 的 QueryInput 上的 EventInput 添加参数
- python - 有没有办法用你喜欢的多个循环创建一个嵌套循环(python)?
- c# - 在我给出该指令之前,变量值会更新
- xml - 用 XML 表示深度嵌套的数据
- r - label_bquote() 不适用于 ggplot2 中的列分面
- docker - Docker 无法删除已经存在的网络
- macos - /etc/hosts 如何影响 Idea Mac 版 springboot 项目启动的时间成本?
- google-sheets - 谷歌电子表格,使用数组公式和日期之间的过滤器