I’m implementing a map for an exercise and I’m at the point where I would have to iterate over it (done and working) but the problem is that I don’t know how to implement a last element (presumably an empty link). I was thinking that I would attach some special kind of link (descendant of base link) which would then be attached to the last element and in this way I would be able to detect if I’m at the real last element or not. I wonder what will be your opinion about this idea and probably hear from you about some more traditional and regularly used techniques for doing this.
Share
If your iterator isn’t bidirectional then you don’t really need end to point to anything (just use NULL in that case).
end()only needs to have a real value in the case of a bidirectional iterator, because in that case you’ll need to be able to move backwards fromend()towards the beginning of the list.The GNU C++ Library (what you get if you use
std::mapwith GCC/G++) implementsend()as a pointer to the root node of the tree. This way, if used in a bidirectional iterator you can access the root node to find the right most node in the tree (which is the node directly beforeend()).Edit to explain an empty tree
The map itself always contains a node for the root of the tree (it’s not a pointer, its a normal member node). When the tree is empty, both leaves of this node point to the node itself (as does
end()). So in an empty treebegin()would return the same thing asend().So we have something like this: