是否可以存储迭代器
Is it possible to store an iterator?
例如,假设我有一个const_iterator:
QHash<const QString, QPair<const Node, double> >::const_iterator citer = adjNodeHash.begin();
然后,我可以将 citer 存储在数据结构(包含许多迭代器)中并在以后重复使用它,它仍然引用我下次使用它时离开的同一位置吗?(假设我相应地更新它/在增加它时使用对它的引用)
我问这个是因为我使用了这种方法,但得到了一些未定义的巴哈维,我想知道这是否是罪魁祸首。
任何帮助将不胜感激。
标准中描述了std
容器的迭代失效规则。 QHash
的文档中也会有一些迭代器失效规则(希望如此!
存储的迭代器在失效之前一直有效。 大多数哈希映射在"重新哈希"时会使它们的迭代器失效,这发生在它们超过某个界限时。
在实践中,在添加或删除元素的时间段内将迭代器存储到哈希图中可能是一个坏主意。 保持该迭代器有效将需要不断的维护和错误检查,从而增加每次使用该哈希映射的开销,并且出现的任何错误可能不会立即显示,并且发生的错误不会发生在发生错误的位置附近。
最重要的是,如果您交换了正在使用的哈希容器,迭代器失效规则的细节将有所不同。 这使得将来的重构更加痛苦。
相关文章:
- 接受迭代器作为参数并存储值的类?
- 将列表迭代器存储为成员
- 访问存储在迭代器中的数据
- 创建不存储value_type的输入迭代器
- 存储Boost Multi_index索引迭代器
- 如何将迭代器(或类似的东西)存储到硬盘上
- 在C++中将迭代器存储为类成员的最佳实践
- 如何在C++中存储对 stl 容器元素的指针/迭代器引用
- 将迭代器存储到字符串中(Conversion、cast、append?)
- 将迭代器存储在临时容器上,然后从其他容器中删除它们
- 如何在 Map 中存储集合容器的迭代器列表
- 存储当前和下一个迭代器
- std::forward_list -- 使用存储的迭代器擦除
- 使用std::vector::迭代器修改存储在std::vector中的值
- 拼接列表后,迭代器存储了错误的值
- c++ 11:在不知道其容器的情况下存储迭代器
- 对于具有线性存储的容器,可以使用原始指针代替带有STL算法的迭代器吗?
- c++将迭代器存储在SET中
- 如何在c++中使用std::list迭代器存储在std vector中,创建复制安全容器
- 将STL迭代器存储在联合中是否合法?