Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2006-11-17 10:15:10

Markus Werle <numerical.simulation_at_[hidden]> writes:

> Sebastian Redl <sebastian.redl <at>> writes:
>> Markus Werle wrote:
>> > Hi!
>> >
>> > This was detected by profiling. I expected the code below
>> > to have a rather cheap std::distance call because my iterator
>> > was tagged as random_access.
>> >
>> std::distance doesn't understand the new iterator categories,
> Ouch! The tutorial is definitely too short!

Patches welcomed.

> So I can use std::random_access_iterator_tag instead?

Not with your iterator definition; you'd be lying to the standard
library. A standard random access iterator has a reference type of
value_type&. Without that, your iterator is just an input iterator
from the STL point-of-view.

> I simply want an iterator that works with current STL as random
> iterator.

Then use a real reference type. Sorry, the STL iterator design took a
limited worldview and you have to conform to it if you want to get all
the expected optimizations.

> Class Demo uses a std::size_t as index type.
> How do I build my iterator with iterator_facade?

Use a signed distance type; that's a requirement of STL (and
new-style) iterators.

Dave Abrahams
Boost Consulting

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at