例如,假设我有一个const_iterator:
QHash<const QString, QPair<const Node, double> >::const_iterator citer = adjNodeHash.begin();
Run Code Online (Sandbox Code Playgroud)
然后我可以将citer存储在一个数据结构(包含许多迭代器)中并在以后重新使用它,它仍然指的是我下次使用它时离开的那个地方吗?(假设我相应地更新它/在我递增它时使用它的引用)
我问这个是因为我使用了这种方法但是我得到了一些未定义的行为,我想知道这是否是罪魁祸首.
任何帮助将非常感激.
std标准中描述了容器的迭代失效规则. QHash在它的文档中也会有一些迭代器失效规则(希望如此!).
存储的迭代器在失效之前一直有效.大多数哈希映射在它们"重新散列"时使它们的迭代器无效,当它们超过某个边界时会发生这种情况.
实际上,在迭代器中添加或删除元素的过程中,将迭代器存储到哈希映射中可能是个坏主意.保持迭代器有效将进行持续的维护和错误检查,为每次使用该哈希映射增加开销,并且可能不会立即显示任何开发的错误,并且在发生错误的地点附近不会发生错误.
最重要的是,如果你换掉你正在使用的哈希容器,迭代器失效规则的细节将会有所不同.这使得将来的重构更加痛苦.
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |