This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: vector<T>::iterator
- From: Matt Austern <austern at apple dot com>
- To: Thomas Kunert <kunert at physik dot tu-dresden dot de>
- Cc: libstdc++ at gcc dot gnu dot org
- Date: Wed, 30 Jul 2003 16:44:09 -0700
- Subject: Re: vector<T>::iterator
On Wednesday, July 30, 2003, at 07:59 AM, Thomas Kunert wrote:
Currently, vector<T>::iterator is defined as some class type. I'd like
to give some arguments for using T* instead.
The main advantage I see is speed of the produced code. Sure, for an
flawlessly optimizing compiler, the resulting code should be
identical. But real world compilers, including GCC, have flaws and
hence may produce
worse code when using a class type. Especially for unoptimized
compilations,
the resulting code is very different. And, of course, the speed even of
unoptimized code is important.
The next advantage is simpler code in the library itself, which
simplifies
bug hunting in the library as well as in user code.
The only disadvantage I see it that T* allows the user to write
non-portable
code. This is not really a problem, because such code will be found
immediately
and fixed easily if necessary.
Am I missing something?
Only the history. Vector<T>::iterator used to be T*. The libstdc++
maintainers deliberately changed it to be a class that wraps T*, with
full awareness of both the advantages and disadvantages you mention. I
don't think there's any chance of convincing them to change it back.
--Matt