可解除引用的迭代器

时间:2017-01-01 18:25:55

标签: c++ iterator

标准中是否有任何内容表明如果a是标准容器,则任何返回未失效的迭代器的a方法应该是可解除引用的或等于{{1} }?

使用返回迭代器的方法来编写容器会不会违反标准,该迭代器不会失效且与a.end()不同并且无法解除引用?

我正在考虑构建一个开放的地址哈希表,其中

a.end()
如果密钥在哈希表中,

返回指向存储(key,value)对的槽的指针,如果key不是该哈希表的一部分,则返回插入(key,value)的槽。在第二种情况下,迭代器无法解除引用,并且与it search(const K& key) 不同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Iterator是在基本语言功能之上在C ++标准库中引入的概念。你当然可以拥有自己类型的"迭代器。"

对于明确的语义,在哈希表的情况下,search()可能永远不会返回end(),因为它总是返回一个有效的槽(即使它可能是空的)。

通过返回迭代器,您可能打算通过调用operator++()来尝试连续的哈希值。在这种情况下,当所有插槽(空或非空)耗尽时(假设散列表大小保持不变),它可以返回end()