【问题标题】:istream_iterator and lazy evaluationistream_iterator 和惰性求值
【发布时间】:2014-02-24 19:21:45
【问题描述】:

考虑到istream_iterator惰性评估,我想知道是否可以依赖已初始化但从未取消引用或递增的条件迭代器。

举个例子:

#include <iostream>
#include <fstream>
#include <iterator>

using namespace std;

int main(void)
{
    ifstream file("some_directory");
    istream_iterator<int> beg(file), eof;

    if (beg != eof) {

        //do something
    }
    else {

        cerr << "No Input!" << endl;
    }
}

鉴于此代码示例,我的问题是: 即使file 为空,(beg != eof) 是否有可能被评估为 true

【问题讨论】:

    标签: c++ lazy-evaluation istream-iterator


    【解决方案1】:

    鉴于此代码示例,我的问题是:即使 file 为空,(beg != eof) 是否有可能被评估 true

    没有。标准说 (24.6.1/1-2) 说,

    [istream_iterator]构造后,每次使用++,迭代器都会读取并存储T的值。如果迭代器未能读取和存储 T 的值...迭代器将等于 end-of-stream 迭代器值。 ... 两个流尾迭代器总是相等的。流结束迭代器不等于非流结束 迭代器。当从同一个流构造时,两个非流结束迭代器是相等的。

    也就是说,这并没有你想的那么懒:

    istream_iterator<int> beg(file)
    

    它将读取第一个int。如果文件为空,则失败并立即成为流结束迭代器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2015-08-21
      • 2015-09-25
      相关资源
      最近更新 更多