I have read the book Jos and it says what you say it says (surprise surprise eh). My thinking and logic where along the write lines but I am definately glad I read the book and got the kinks sorted out.
evenstar, as to your last question in the same book you need to refer to section
5.3 Pointers into Arrays which says among other things:
Taking a pointer to one element beyond the end of an array is guaranteed to work.
and
The result of taking the address of the element before the initial element is undefined and should be avoided.
Now while a list may not be an array a vector is and they both use the same standard implementation of the reverse iterator (shown on page 557 of said book) so the reverse iterator must conform to the 2 quotes I gave. That is it can point into or 1 past the end of the "array" or at any element in the array.
In light of that having the reverse iterator point to 1 past the required element and returning (current - 1) keeps the logic and pointer arithmetic nice and simple.