【发布时间】:2011-10-18 10:36:56
【问题描述】:
所以我正在尝试实现一个插入函数,它将一个元素插入到列表中的正确顺序中。
我的输入如下:
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
有人能告诉我发生了什么导致这个问题吗?
【问题讨论】:
-
将问题减少到SSCCE。
elem是什么?//do a bunch of other stuff中有什么内容?第二条线是如何再次到达的?这段代码没有回答任何这些关键问题。 -
@Mankarse 有太多代码无法复制/粘贴到 OP 中。与
itr->getItem()相比,//do a bunch of other stuff几乎可以检查项目适合的位置,并使用insert将其插入该区域。我认为问题不在于该部分内部的任何地方,因为在进入循环之前它会打印出J,但是一旦进入它就会打印出Z -
很抱歉,如果您不发布完整的示例,我们将无法帮助您。
-
除非你发布一段完整的代码,否则你不可能得到答案。你上面的内容没有任何问题,所以问题显然出在你没有提供的代码中! (例如:如果您在“隐藏”代码中的某处插入容器,那么您“可能正在更改迭代器,但我们无法在没有看到代码的情况下判断!
-
对于初学者,您可以发布
list的代码。这显然不是std::list,因为std::list没有一个只接受一个参数的insert函数。