3

我有一个关于迭代器的简单问题,在下面的代码中,我使用了三种方法从迭代器的指针中获取值并将它们放入标准输出或向量中,但是即使按下回车键,cin 流也是连续的。这段代码中的错误应该是什么......在此先感谢

#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

int main()
{

    vector<double> My_container ;

    cout << "Enter values separated by spaces : " ;


#define code1

#ifdef code1

    copy (istream_iterator<double>(cin),
          istream_iterator<double>(),
          ostream_iterator<double>(cout)) ;    

#endif // code


/////////////////////////////////////////////////////
#ifdef code2

    istream_iterator<double> eos ;
    istream_iterator<double> basic_input (cin);    

    while (basic_input != eos)
    {
        My_container.push_back(*basic_input) ;
        ++basic_input ;    
    }

    for (int i = 0 ; i < My_container.size() ; i++)
    {
        cout << i << " :" << My_container.at(i) << endl ;
    }

#endif //code2


//////////////////////////////////////////////
#ifdef code3

    istream_iterator<double> stream_end ;
    istream_iterator<double> basic_input (cin);    

    for ( ; basic_input != stream_end; ++basic_input )
    {
        My_container.push_back(*basic_input) ;
    }

    for (int i = 0 ; i < My_container.size() ; i++)
    {
        cout << i << " :" << My_container.at(i) << endl ;
    }

#endif //code3

}
4

2 回答 2

3

你的代码本身没有错。

您只是通过设计获得了这种行为。为什么?因为cin默认跳过空格。

正如@Veritas 所指出的,您必须发出 EOF 信号。为此:

  • 在 Windows 上:Ctrl-D(实际上是键入 - 这不是键盘组合)
  • 在 *nix: Ctrl-D (实际的键盘组合。从技术上讲,这实际上是一个EOT

为什么你必须这样做?由于cin默认跳过空白,它如何知道何时停止读取数据?唯一的方法是向数据流中发送或输入 EOF 字符(如上所述)。

于 2014-05-27T11:17:07.437 回答
1

您正在等待 eof 以关闭流。按下回车键是不行的,它只是在流中放置一个换行符。

您要么必须检查换行符,要么自己发出信号。

于 2014-05-27T11:07:10.270 回答