DList and SList missing length property?
Steven Schveighoffer
schveiguy at yahoo.com
Tue May 28 12:23:58 PDT 2013
On Tue, 28 May 2013 15:06:53 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> On Tuesday, May 28, 2013 20:51:55 monarch_dodra wrote:
>> That was in C++03. In C++11, length was reduced to 0(1). And
>> splice was increased to 0(N) (I think, I don't remember the exact
>> details, but it was definitely changed).
>
> I do remember hearing something about that, though that will actually
> result
> in some nasty performance changes to some of the code out there
> (including
> code that I've written).
>
> Regardless, you have the choice of making length O(1) or splicing O(1)
> and not
> both, and C++98/03 made splicing O(1), which I'm inclined to believe is
> the
> better choice, though having size when it's O(n) was a definite mistake
> on
> C++'s part IMHO. I hate to think of how many times I've seen programmer's
> write container.size() == 0 instead of empty(), particularly when size()
> was
> O(n)...
I actually had performance bugs the OTHER way -- I needed the length of a
list, and was using .size() without realizing it was O(n). In profiling
my code, I found that std::list<T>::iterator::operator++ was the most used
function, and I had no idea why for a LONG time :)
You know, it is trivial to have an O(1) splice O(n) length list wrapped
into an o(n) splice O(1) length list. All you need is to add a tracked
length. And this is a REAL pain when you have to do it manually. There
should just be two list types in <list>
-Steve
More information about the Digitalmars-d
mailing list