int row,column;
for (;;) {
cin >> rows >> columns;
if (!rows && !columns) break;
vector<char> dots(rows * columns);
copy(istream_iterator<char>(cin), istream_iterator<char>(), dots.begin());
// process vector
copy(dots.begin(), dots.end(), ostream_iterator<char>(cout, " "));
cout << '\n';
}
7 回答
嗯,你cout << '\n';
在那个循环里面有一个......所以它newline
每次通过循环时都会打印一个。
当出现istream_iterator
输入错误或文件结尾时(缓冲区溢出可能发生在您的向量不计算在内:))。
一旦cin
处于错误或 EOF 状态,所有后续输入操作都将失败(除非您cin.clear();
处于状态)并且代码最终只显示换行符。
有点不清楚这是否是你真正想要的。也许您只是想读取rows*column
字符(也许丢弃输入中的换行符)。
您需要初始化变量、行和列(可能为 0)。进入是一个好习惯。
因为:
for(;;)
它代表“永远这样做”,再加上行和列可能永远不会被 cin 设置为零的事实。
尝试为 cin 输入输入零,它可能会结束。
还写:
cout << endl;
这正是我所做的,因为我喜欢刷新缓冲区。
好吧,它并不能真正回答您的问题,但是您可以将两者合二为一copy
,如
copy(istream_iterator<char>(cin), istream_iterator<char>(), ostream_iterator<char>(cout, " "));
我不认为这条线:
copy(istream_iterator<char>(cin), istream_iterator<char>(), dots.begin());
正在做你想做的事情......我不确定你是否可以通过这种方式将 copy 与 cin 一起使用,因为我认为这istream_iterator<char>()
不会是指向你要读取的最后一个元素的迭代器。这是来自某个地方的例子吗?
您是否打算将行和列初始化为某个值,然后递减它们或其他什么?就目前而言,有时您的代码将永远持续下去,有时它会在循环的第一次运行时退出,甚至还没有做任何有趣的事情。