我有一个关于迭代器的简单问题,在下面的代码中我使用了三种方法从迭代器的指针获取值并将它们放入标准输出或向量中,但即使在按下回车键后,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
}
答案 0 :(得分:3)
您的代码本身并没有错。
您只是通过设计获得了这种行为。为什么?因为cin
默认跳过空格。
@Veritas已经注意到你必须发出EOF信号。为此:
你为什么要这样做?由于cin
默认跳过空格,它如何知道何时停止读取数据? 唯一的方法是向数据流发送或输入EOF字符(如上所述)。
答案 1 :(得分:1)
您正在等待eof以关闭流。按Enter键不会,它只是在流中添加换行符。
您要么必须检查换行符,要么自己发出信号。