标准中是否有任何内容表明如果a
是标准容器,则任何返回未失效的迭代器的a
方法应该是可解除引用的或等于{{1} }?
使用返回迭代器的方法来编写容器会不会违反标准,该迭代器不会失效且与a.end()
不同并且无法解除引用?
我正在考虑构建一个开放的地址哈希表,其中
a.end()
如果密钥在哈希表中,返回指向存储(key,value)对的槽的指针,如果key不是该哈希表的一部分,则返回插入(key,value)的槽。在第二种情况下,迭代器无法解除引用,并且与it search(const K& key)
不同。
感谢您的帮助。
答案 0 :(得分:0)
Iterator是在基本语言功能之上在C ++标准库中引入的概念。你当然可以拥有自己类型的"迭代器。"
对于明确的语义,在哈希表的情况下,search()
可能永远不会返回end()
,因为它总是返回一个有效的槽(即使它可能是空的)。
通过返回迭代器,您可能打算通过调用operator++()
来尝试连续的哈希值。在这种情况下,当所有插槽(空或非空)耗尽时(假设散列表大小保持不变),它可以返回end()
。