stdin から次の入力を取得します。
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
ご覧のとおり、最初のキューは正しく読み取られています。しかし、2 番目はではなくl
であるべきです。5
2
に何が起こってい5
ますか? イテレータによって消費されますか?どこでエラーをしましたか?