2014-11-09 79 views
1
  1. 悫`istreambuf_iterator`和'有什么区别悫istreambuf_iteratoristream_iterator的差异。istream_iterator`

  2. 对于下面的代码:

    istream_iterator<int> cin_in(cin); 
    istream_iterator<int> end; 
    

    在哪里呢迭代器end点?
    迭代器是否与流绑定?
    如果我写的代码

    istream_iterator<int>() 
    

    是一样的end

  3. 所有记录在哪里?

+1

[我在哪里可以找到当前的C或C++标准文档?](http://stackoverflow.com/questions/81656/where-do-i-find-the-current-c-or-c -standard-documents) – Deduplicator 2014-11-09 02:24:55

+0

@Deduplicator感谢您的编辑! – 2014-11-09 02:25:06

+0

@Deduplicator嗨,感谢您的回复。我已经阅读了你在评论中包含的链接,我发现那里有这么多的答案,我不知道哪一个是有帮助的......我是一个新的C++,阅读过于复杂有点困难东西.. – 2014-11-09 02:26:47

回答

7

是什么悫istreambuf_iteratoristream_iterator的差异。

std::istream_iterator为格式化提取的迭代器。举例来说,如果你有一个线从文件整数,并希望将它们复制到一些容器,你可以使用std::istream_iterator<int>在内部将从int(使用operator>>())中提取的值复制到容器:

std::copy(std::istream_iterator<int>(file), 
      std::istream_iterator<int>(), std::back_inserter(some_container)); 

std::istreambuf_iterator是无格式抽取的迭代器。它直接在通过其构造函数提供的对象std::streambuf上工作。因此,如果你只需要文件的内容而不用担心它们的格式,可以使用这个迭代器。例如,有时您想将整个文件读入字符串或某个容器。一个常规的格式化提取器将丢弃前导空白并转换提取的令牌;缓冲区迭代器不会:

std::string str(std::istreambuf_iterator<char>{file}, {}); 

哪里迭代器终点?

默认构建的流迭代器只是一个特殊的标记对象,它表示流的结束。由于IOStreams是一次性的,所以在我们读完这一点之前,没有办法直接指向结尾。在内部,当提取失败或读取命中文件结束时,由流(或流缓冲区)构造的迭代器将变为结束流迭代器。这是帮助标准算法与流迭代器一起工作的原因,因为它们像外部的常规迭代器一样工作。

那里的所有记录?

很多地方。正式在标准中。您还可以在cppreference上找到相关文档。

+0

好的答案!谢谢 – Aminos 2016-10-10 12:15:47

相关问题