2010/11/2 Rao, Anant
While it’s true that a char* seems to be equivalent to an iterator (in this case), I prefer the iterator/reverse_iterator much better. For example, if I use an iterator and it reaches end(), I can do --it to get to the last char. In a char * model, once I reach the NULL ptr (at the end of the string), I can’t back-track.
I think You are confusing NULL pointer with null character.
Similarly, rbegin()/reverse_iter. Maintaining a sentinel value for the start of a string is more difficult (other than indices). IMHO, those are the solid advantages I see with an iterator.
I re-read the article published by David Abrahams et al on ‘reverse_iterator’ (http://www.boost.org/doc/libs/1_44_0/libs/iterator/doc/reverse_iterator.html...)
and felt it’s adequate for my purposes. Basically, I will use that reverse_iterator for both fwd and reverse traversals by using ++ and --.
I think You are confusing bidirectional iterator with reverse iterator
A couple of simple questions I have:
- Why is it not possible to define a boost::iterator as easily as a boost::reverse_iterator on a char * string as in the above web link? (Again, it doesn’t block me – as I mentioned, I’ll just use a reverse_iter and use ++ and – on it to satisfy my needs. More of curiosity).
Because char* is an iterator itself.
- Looks like boost::reverse_iterator can’t be assigned to; can only be created. If I need to define it as a class member that needs to be made to point to diff strings as the program progresses, it doesn’t seem to be possible. So, I’m thinking of using a ptr to a boost::reverse_iterator so that I can re-seat the reverse_iterator to diff strings. Is this a convoluted approach or correct approach (given my needs)? If former, what’d be the correct approach?
I think it can be assigned to, but that is irrelevant, because You don't seem to need it anyway. Regards, Kris.