上下文
我有一个从地图和矢量放在一起的自定义模板容器类。映射将字符串解析为序数,并且向量将条目解析为条目(仅对序数查找进行初始字符串,将来对向量进行引用)。这些条目被侵入修改为包含一个bool
“赋值”和一个iterator_type,它是容器类映射的const_iterator。
我的容器类将使用RCF的序列化代码(模型boost :: serialization)将我的容器类序列化到网络中的节点。序列化迭代器是不可能的,或者是一堆蠕虫,我可以轻松地重新生成它们,矢量和地图在远程站点上被序列化。
问题
我需要默认初始化,并且能够测试迭代器是否尚未分配(如果已分配它是有效的,如果不是,则无效)。由于map迭代器在对其执行的操作时不会失效(除非当然删除了项目:D)我是否认为map<x,y>::end()
是有效的哨兵(无论地图的状态如何 - 即,它可能是空的)初始化为?
我将始终可以访问父地图,我只是不确定天气end()
是否与地图内容更改相同。
我不想使用另一级别的间接(--ie,boost :: optional)来实现我的目标,我宁愿放弃编译器检查来纠正逻辑,但如果我不这样做会很好需要。
其它
This question exists,但其大部分内容似乎都没有意义。根据g ++和clang ++,为迭代器分配NULL是无效的。
This is another类似的问题,但它侧重于迭代器的常见用例,通常倾向于使用迭代器进行迭代,当然在这个用例中,容器的状态并不意味着在迭代进行的同时改变。
答案 0 :(得分:2)
你基本上是理所当然的。只有在删除指向的元素时,映射迭代器才会失效。 map.end()
未指向元素,因此永远不会失效。
但它不是地图迭代器的默认值。每个地图对象都有自己的end()
,它们不具有可比性。这不应该是你的问题;小心点。