2011-10-18 186 views
-3

所以我試圖實現一個插入函數,它將一個元素插入列表中正確的順序。迭代器無故迭代C++

我輸入變爲爲:

b.insert('Z'); 
    b.insert('J'); 
    b.insert('Y'); 

和應該輸出爲:

J Y Z

我開始通過讓我的迭代點在列表的開頭,然後通過每個對象迭代直到我找到正確的位置進入它。我不明白爲什麼,但是當我從迭代開始時,它在進入循環後向前跳一個點。

class list < node<T>* >::iterator itr = bt->level().begin(); 

     cout << "itr now: " << (*itr)->getItem() << endl; 

     while (itr != bt->level().end()) { 
     cout << "itr now: " << (*itr)->getItem() << " and " << elem << endl; 

     // do a bunch of other stuff 
     ++itr; 
     } 

我這個輸出應該是這樣的:

itr now: Z 
itr now: Z and J 
itr now: J 
itr now: J and Y 

而是它出來作爲

itr now: Z 
itr now: Z and J 
itr now: J 
itr now: Z and Y 

能有人爲告訴我發生了什麼這就是造成這個問題?

+3

將問題簡化爲[SSCCE](http://sscce.org/)。什麼是'elem'? 「//做一堆其他的東西」是什麼?第二條線如何再次達到?此代碼不回答任何這些關鍵問題。 – Mankarse

+0

@Mankarse theres太多的代碼複製/粘貼到OP。 ''做一堆其他的東西'與'itr-> getItem()'相比,能夠檢查項目適合的位置,並用'insert'將它插入到該區域。我認爲問題不在於該部分內部的任何地方,因爲它在進入循環之前打印出'J',但是一旦它進入它,pritns' Z' – SNpn

+0

恐怕,但是如果你沒有發佈,我們不能幫助你一個完整的例子。 –

回答

0

請在這裏發佈您的完整代碼,如果您正在尋找排序順序,那麼只需插入container中的元素,並使用標準algorithm sort,這將爲你做的伎倆。

+0

我問爲什麼迭代器在進入循環時跳躍前進,while循環和'cout'語句之間沒有代碼,我不明白爲什麼'cout'語句下面的任何代碼都會影響打印的內容因爲在第二個時間列表的開始是正確的 – SNpn

+6

@SNpn:規則#1當詢問別人的幫助:如果他們說他們需要一些信息,給他們,否則你只是在浪費每個人的時間。 – jalf