【问题标题】:iterator is iterating for no reason c++迭代器无缘无故地迭代c ++
【发布时间】: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

有人能告诉我发生了什么导致这个问题吗?

【问题讨论】:

  • 将问题减少到SSCCEelem 是什么? //do a bunch of other stuff 中有什么内容?第二条线是如何再次到达的?这段代码没有回答任何这些关键问题。
  • @Mankarse 有太多代码无法复制/粘贴到 OP 中。与itr-&gt;getItem() 相比,//do a bunch of other stuff 几乎可以检查项目适合的位置,并使用insert 将其插入该区域。我认为问题不在于该部分内部的任何地方,因为在进入循环之前它会打印出J,但是一旦进入它就会打印出Z
  • 很抱歉,如果您不发布完整的示例,我们将无法帮助您。
  • 除非你发布一段完整的代码,否则你不可能得到答案。你上面的内容没有任何问题,所以问题显然出在你没有提供的代码中! (例如:如果您在“隐藏”代码中的某处插入容器,那么您“可能正在更改迭代器,但我们无法在没有看到代码的情况下判断!
  • 对于初学者,您可以发布list 的代码。这显然不是std::list,因为std::list 没有一个只接受一个参数的insert 函数。

标签: c++ iterator


【解决方案1】:

请在此处发布您的完整代码,如果您正在寻找排序顺序,那么只需将元素插入 container 并使用标准的 algorithm sort 即可。

【讨论】:

  • 我在问为什么迭代器在进入循环时会向前跳转,while 循环和cout 语句之间没有代码,我不明白为什么下面的任何代码cout 语句会影响打印的内容,因为第二次列表的开头是正确的
  • @SNpn:向他人寻求帮助时的规则#1:如果他们说他们需要一些信息,请将其提供给他们。否则你只是在浪费大家的时间。
猜你喜欢
  • 2016-08-23
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多