【发布时间】:2017-04-02 02:08:00
【问题描述】:
我从标准输入得到以下输入:
2
5
2 1 5 3 4
5
2 5 1 3 4
第一行代表队列的数量(我们称这个值n)。然后,对于每个队列,在第一行有一个值l,表示队列的长度,然后是实际队列。
我正在尝试使用istream_iterator 将队列放入向量中,如下所示:
using namespace std;
int n{};
int l{};
typedef std::istream_iterator<int> input_iterator;
cin >> n;
cout<< "n: " << n << "\n";
for(int i = 0; i < n ; ++i){
cin >> l;
cout << "l: " << l << "\n";
std::vector<int> queue;
int counter = 0;
for (input_iterator it(cin); counter < l && it != input_iterator(); ++it){
queue.push_back((*it));
++counter;
}
cout<< "Queue: ";
std::copy(queue.begin(), queue.end(),
std::ostream_iterator<int>(std::cout, " "));
cout << "\n";
}
此代码产生以下输出:
n: 2
l: 5
Queue: 2 1 5 3 4
l: 2
Queue: 5 1
如您所见,第一个队列被正确读取。但是第二个l 应该是5,而不是2。
5 发生了什么事?它被迭代器消耗了吗?我哪里出错了?
【问题讨论】:
-
在调试器中逐行执行代码。并停止隐藏变量,在内循环中为迭代器使用另一个名称。此外,您是否有理由要使用输入迭代器,而不仅仅是使用简单的
std::cin >> ...获取值的普通循环? -
那个和整个阴影的事情实际上是编写这个例子时发生的一个错误。我修好了
标签: c++ c++11 istream-iterator