2014-06-29 61 views
-2

我正在用C++做一個程序,當我嘗試列出我的向量元素時,它總是顯示最後一個元素。迭代器始終poiting最後一個元素

這裏是我的代碼:

typedef string Tab[1][1]; 
struct Node 
{ 
    Tab t1; 
}; 

,這裏是我如何列出我的元素:

std::vector<Node*>::iterator itr; 

for(itr = Tab_dynamique.begin(); itr != Tab_dynamique.end(); *itr++) 
{ 
    cout << (*itr)->t1[0][0] << " | " << (*itr)->t1[0][1]<< endl; 
} 

誰能告訴我,爲什麼它總是顯示載體的最後一個元素?

+2

嘗試'itr ++'(不要解除引用) – Pavel

+1

請問您可以給出一個[最小樣本再現此行爲](http://stackoverflow.com/help/mcve)嗎? –

+0

據我所見,這應該始終顯示第一個元素。總是意味着你通過* itr ++導致無限循環。 –

回答

2

您的代碼應該工作,至少根據你向我們展示了,但是:

  1. 你的陣列typedef string Tab[1][1]只有一個元素:Tab[0][0]Tab[0][1]超出範圍。例如int tab[3]有以下3個元素:tab[0], tab[1], tab[2]
  2. 你不應該像你一樣增加你的迭代器(*itr++)。首先,你的解引用是不必要的,對迭代器的增量沒有任何影響。其次,你應該增加迭代器的方式:++itr,因爲itr++創建itr的冗餘副本用於返回,然後只增加迭代器。
+0

嗨,我做了你所說的,它總是顯示相同的結果,列表的最後一個元素。 – mohamus

+0

也許一開始你在Tab_dynamique中放了一些NULL元素?添加到你的帖子你如何聲明Tab_dynamique以及如何填充你的向量中的元素。那麼我們會繼續尋找解決方案。 – Dakorn

+0

我發現這個問題,它是Tab t1每次取最後一個值,並且永遠不會改變它。 但我找不到解決方案:/ – mohamus

相關問題