【问题标题】:The weird result of istream_iterator in C++C++ 中 istream_iterator 的奇怪结果
【发布时间】:2013-12-11 03:29:51
【问题描述】:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <list>
using namespace std;

int main()
{
    istream_iterator<int> in_iter(cin);
    istream_iterator<int> eof;
    vector<int> vin;
    /*while (in_iter!=eof)
    {
        vin.push_back(*in_iter++);
    }*/
    istream_iterator<int> in_iter2(cin), eof2;
    vector<int> vin2(in_iter2,eof2);
    return 0;
}

当我在程序中输入1 2 3 c(最后一个元素'c'是使cin状态为EOF)时,最后vin2将包含元素:2 3;但是,当我注释的声明变量in_iter,同样的输入会使vin2包含元素:1 2 3;变量in_iter的声明对这个程序有什么影响?谢谢!

【问题讨论】:

  • 进入EOF的正确方法是……进入EOF。它是 ctrl-Z 或 ctrl-D 取决于您使用的操作系统。输入 c 不会产生任何 EOF。
  • “当我注释变量 in_iter 的声明时”——这是什么意思?
  • @TonyD,我正在考虑评论。

标签: c++ istream-iterator


【解决方案1】:

istream_iteratoristream 的绑定导致从istream 中读取一个值,并将其存储在迭代器中。这是必要的,以便取消引用迭代器可以给出一个值。因此,如果将 2 个 istream_iterators 绑定到同一个 istream,则会读取 2 个值。

将 2 个活动的 istream 迭代器绑定到同一个 istream 很少有用。

作为一个稍微有趣的实验,看看如果你同时创建in_iterin_iter2,两者都绑定到cin,并使用in_iter(或先创建的任何一个)初始化你的向量,会发生什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多