On Wed, 21 Mar 2012 20:53:42 -0400, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Wednesday, March 21, 2012 20:46:05 Jonathan M Davis wrote:
On Wednesday, March 21, 2012 20:17:06 Steven Schveighoffer wrote:
> On Wed, 21 Mar 2012 19:56:41 -0400, Jonathan M Davis <jmdavisp...@gmx.com>
>
> wrote:
> > Except that containers shouldn't provide indexing if it's not efficient.
> > And
> > from what I've seen, it's far too common for programmers to check length
> > == 0,
> > and they end up doing it on stuff like linked lists where it _is_
> > inefficient.
>
> Wait, if someone provides inefficient length, what makes you think they
> won't provide inefficient indexing?

Both C++'s STL and D's std.container put requirements on the algorithmic
complexity of various operations. O(n) indexing would violate them, whereas
they allow O(n) length/size.

Actually, it looks like std.container _does_ guarantee that length is O(1), unlike C++'s STL, in which case it's not the same issue that it is in C++. I'd still tend to argue that checking for empty is better, but I guess that it's
not as big a deal. In C++, it's a definite problem when programmers keep
checking that size() == 0, since inevitably, it ends up happening with linked lists and the like, making for inefficient code, and simply being in the habit
of using empty() rather than size() == 0 avoids such problems.

Yes, that was my point.

Note that the default std::list has O(1) length (as does dcollections' LinkedList). It's not as inevitable as you think.

-Steve

Reply via email to