2011-10-18 141 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