On 06/08/2010 12:26 PM, Andrei Alexandrescu wrote: > On 06/08/2010 10:53 AM, Simen kjaeraas wrote: >> I hold that a range is a view that does not change the underlying data, >> and does not store all its data. >> That makes an array a container, which I feel is correct. It may still >> have range functionality, and thus be both, but it should be >> categorized as a container first. >> >> Are there other ranges that violate this definition? > > The explanation goes as Steve puts it. A container has control over its > topology.
>From your perspective as the library writer, perhaps. As a user, my criterion is this: If I might go behind the back of the view, either to directly access the underlying structure or to impose a different view, then the view is a “range”; if that is unlikely than the view is itself a structure, a “container”. One addendum: The fact that I can choose the underlying container does not count as “going behind the back of the view”. If I implement a BinaryHeap (say) on something that wraps an on-disk file, that’s just an implementation detail; it’s still just a variant of BinaryHeap. —Joel Salomon
