Container hierarchy vs. container types

Michel Fortin michel.fortin at michelf.com
Fri Mar 5 14:56:36 PST 2010


On 2010-03-05 16:09:08 -0500, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

> A range is a view on a container. As such, popping off a range does not 
> affect the topology of the underlying container. Consider, for 
> contrast, a balanced binary tree. Removing an element triggers a 
> rebalance of the tree, but popping an element off an iterator in that 
> tree does not affect the tree itself.
> 
> Fair enough?

That's a fine definition, except for the word "topology".

Whether it changes the topology should be an implementation detail. 
Popping of a C++ vector or a hash table doesn't change the topology, 
will you make them ranges? That doesn't make much sense.

Also, do you consider that popping off a stream affects its topology? 
If your stream is buffered, you're probably advancing a pointer through 
a buffer with 'pop', and deallocating old buffers from time to time. So 
this definition would forbid a stream from being a range. That doesn't 
make much sense.

And similarly you could have a queue container where you insert things 
at the back and pop things from the front. But that's basically the 
same thing as a stream. Is a queue a container or a range?

I think this definition is more on the spot: a range is something you 
consume, a container is something used to hold data. Those definition 
are not mutually exclusive, but is this really a problem?


-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list