Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以存储迭代器吗?_C++_Qt_Iterator - Fatal编程技术网

C++ 可以存储迭代器吗?

C++ 可以存储迭代器吗?,c++,qt,iterator,C++,Qt,Iterator,例如,假设我有一个常量迭代器: QHash<const QString, QPair<const Node, double> >::const_iterator citer = adjNodeHash.begin(); QHash::const_迭代器citer=adjNodeHash.begin(); 然后我可以将citer存储在一个数据结构中(包含许多迭代器)并在以后重新使用它,而它仍然引用我下次使用它时留下的相同位置吗?(假设我相应地更新它/在递增时使用对它的

例如,假设我有一个常量迭代器:

QHash<const QString, QPair<const Node, double> >::const_iterator citer =  adjNodeHash.begin();
QHash::const_迭代器citer=adjNodeHash.begin();
然后我可以将citer存储在一个数据结构中(包含许多迭代器)并在以后重新使用它,而它仍然引用我下次使用它时留下的相同位置吗?(假设我相应地更新它/在递增时使用对它的引用)

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


非常感谢您的帮助。

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

存储的迭代器在失效之前保持有效。大多数散列映射在“重新散列”时使迭代器失效,这是在它们增长超过某个界限时发生的

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


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

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

存储的迭代器在失效之前保持有效。大多数散列映射在“重新散列”时使迭代器失效,这是在它们增长超过某个界限时发生的

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


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

取决于容器的失效规则,但通常存储迭代器/指针不是一个好主意。最好只存储密钥(在映射的情况下)。您可以保存一个迭代器,但要知道,如果您修改容器(插入、删除等),很可能会使其无效。粗略地说,它们遵循与指针类似的规则:即容易失效。“我问这个问题是因为我使用了这种方法,但我得到了一些未定义的错误,我想知道这是否是罪魁祸首。”我们实际上无法诊断这个问题,除非您提供一个请。另外请注意,对于和Qt迭代器声明,答案可能会有所不同(这就是我添加标记的原因)。取决于容器的无效规则,但通常存储迭代器/指针不是一个好主意。最好只存储键(在映射的情况下)。您可以保存迭代器,但要知道如果修改容器(插入、删除等)你很可能会使它失效。粗略地说,它们遵循与指针类似的规则:ie容易失效。“我问这个问题是因为我使用了这种方法,但却得到了一些未定义的错误,我想知道这是否是罪魁祸首。“事实上,我们无法对此进行诊断,除非您提供一份请柬。另外请注意,对于和Qt迭代器声明,答案可能会有所不同(这就是我添加标记的原因)。感谢您的回答:)我觉得现在重要的一点是,在此过程中哈希不会更改。我基本上是在使用迭代DFS,并希望跟踪我之前搜索时遗漏的每个顶点的相邻节点。因此,我将这个额外的变量(迭代器)与顶点一起存储在堆栈上。无论如何,我得到了一个普遍的想法,那就是从所有这些注释中存储迭代器是一个坏主意,所以我将坚持使用枯燥的旧整数。谢谢你的回答:)我觉得现在重要的是,在此过程中哈希值不会改变。我基本上是在使用迭代DFS,并希望跟踪我之前搜索时遗漏的每个顶点的相邻节点。因此,我将这个额外的变量(迭代器)与顶点一起存储在堆栈上。无论如何,我得到了一个普遍的想法,那就是从所有这些注释中存储迭代器是一个坏主意,所以我将坚持使用枯燥的旧整数。