太多我從標準輸入下列輸入:istream_iterator消耗從流
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 >> ...'來獲取值? –
這和整個陰影事實上是寫這個例子發生的錯誤。我修正了這一點 – user2393256