我只是想在元素的排序或删除之后询问迭代器是否有效。当我们插入容器时,可以重新分配它以查找更多空间并使现有迭代器无效。但是排序和删除元素会发生什么?那些人可以强制重新分配容器吗?
这段代码会崩溃一次吗?
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);
}
答案 0 :(得分:6)
来自Container Classes文档:
迭代器类
迭代器提供了访问容器中项目的统一方法。 Qt的容器类提供两种类型的迭代器:Java样式迭代器和STL样式迭代器。 当由于调用非const成员函数而修改容器中的数据或从隐式共享副本中分离时,两种类型的迭代器都将失效。
是的,您的代码不正确。你不应该像你那样“缓存”迭代器。