排序或删除元素后迭代器是否有效?这段代码是定时炸弹吗?

时间:2012-02-04 09:21:54

标签: c++ qt iterator

我只是想在元素的排序删除之后询问迭代器是否有效。当我们插入容器时,可以重新分配它以查找更多空间并使现有迭代器无效。但是排序和删除元素会发生什么?那些人可以强制重新分配容器吗?

这段代码会崩溃一次吗?

QVector<Foo> container;

b = container.begin();
e = container.end();

while (container.count() > newCount)
{
    computeSomePropertyOfFoo(b, e);  // Computes property between b and e
    sortByThatProperty(b, e);        // sorts members between b and e
    container.erase(--e);
}

1 个答案:

答案 0 :(得分:6)

来自Container Classes文档:

  

迭代器类

     

迭代器提供了访问容器中项目的统一方法。 Qt的容器类提供两种类型的迭代器:Java样式迭代器和STL样式迭代器。 当由于调用非const成员函数而修改容器中的数据或从隐式共享副本中分离时,两种类型的迭代器都将失效。

是的,您的代码不正确。你不应该像你那样“缓存”迭代器。