是否可以存储迭代器



例如,假设我有一个const_iterator:

QHash<const QString, QPair<const Node, double> >::const_iterator citer =  adjNodeHash.begin();

然后,我可以将 citer 存储在数据结构(包含许多迭代器)中并在以后重复使用它,它仍然引用我下次使用它时离开的同一位置吗?(假设我相应地更新它/在增加它时使用对它的引用)

问这个是因为我使用了这种方法,但得到了一些未定义的巴哈维,我想知道这是否是罪魁祸首。

任何帮助将不胜感激。

标准中描述了std容器的迭代失效规则。 QHash的文档中也会有一些迭代器失效规则(希望如此!

存储的迭代器在失效之前一直有效。 大多数哈希映射在"重新哈希"时会使它们的迭代器失效,这发生在它们超过某个界限时。

在实践中,在添加或删除元素的时间段内将迭代器存储到哈希图中可能是一个坏主意。 保持该迭代器有效将需要不断的维护和错误检查,从而增加每次使用该哈希映射的开销,并且出现的任何错误可能不会立即显示,并且发生的错误不会发生在发生错误的位置附近。

最重要的是,如果您交换了正在使用的哈希容器,迭代器失效规则的细节将有所不同。 这使得将来的重构更加痛苦。

最新更新