2014-06-29 4 views
-2

Я делаю программу с C++, и когда я пытаюсь перечислить свои векторные элементы, она всегда отображает последний элемент.Итератор всегда удаляет последний элемент

Вот мой код:

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

try '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

Смежные вопросы