Re: Weird behaviour from std::list<>::reverse_iterator
James Kanze wrote:
On Aug 25, 4:13 pm, Pete Becker <p...@versatilecoding.com> wrote:
Rune Allnor wrote:
[...]
So from a semantic point of view, the obvious thing to
try is
std::list<T> list;
std::list<T>::reverse_iterator i = ...;
list.erase(i);
and then expect the item referenced by i to be erased.
Isn't that the philosophy behind the STL? That users
should only worry about semantics and not need to know
about implementation details?
The problem with that, of course, is that list::erase doesn't
take a reverse_iterator, so that code doesn't compile. You'd
have the same problem if you tried to use any other iterator
type (except list::iterator and list::const_iterator) here.
And that's a legitimate complaint.
Just wondering... Is it too late to do something about this for
the next release of the standard. It doesn't look like it would
require a lot of work.
Iterator adaptors (such as reverse_iterator) work when you pass them to
generic algorithms. Making them work with non-generic algorithms that
make assumptions about details of the underlying container is quite
another thing. Off the top of my head, I don't see a clean way to do it.
-- add a requirement that iterator adaptors provide a member
function that returns the underlying iterator. Currently there
are no explicit requirements for iterator adaptors, so someone
would have to define what iterator adaptors are and write a
complete set of requirements for them.
-- add an ad hoc set of member functions (erase, sort, ...)
to all the container requirements for each of the standard's
iterator adaptors. Gack.
-- specify a converter function that takes an iterator and
returns its underlying iterator; default is to return its
argument, specialize for various iterator adaptors. Maybe.
Of course, all of these would also have to address the possibility of an
adaptor that's constructed from another adaptor. And that's not trivial.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of
"The Standard C++ Library Extensions: a Tutorial and Reference"
(www.petebecker.com/tr1book)