Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
May 04, 2004 double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
For those who can't wait for DTL, or for those who just need a simple double-ended queue, I've put a deque.d at http://home.comcast.net/~benhinkle/deque.d It is implemented as a single dynamic array so slicing and manipulating it like an array is very easy and "D-like". I figured no iterator is needed for it. The resizing algorithm is the messiest part but right now it is pretty simple. I looked around on the web a little before making it so apologies someone already wrote a deque and I missed it. Feedback welcome. -Ben |
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | Shouldn't the capacity of the deque grow exponentially?
Right now, complexity of adding elements is O(n) where n is the size of the
deque. (because of the copying)
If the capacity of deque grows exponentially it is only O(log n).
AFAIK the STL does the same.
--
Jan-Eric Duden
"Ben Hinkle" <bhinkle4@juno.com> wrote in message news:c770lv$1cbm$1@digitaldaemon.com...
> For those who can't wait for DTL, or for those who just need a simple double-ended queue, I've put a deque.d at
>
> http://home.comcast.net/~benhinkle/deque.d
>
> It is implemented as a single dynamic array so slicing and manipulating it like an array is very easy and "D-like". I figured no iterator is needed for it. The resizing algorithm is the messiest part but right now it is pretty simple. I looked around on the web a little before making it so apologies someone already wrote a deque and I missed it. Feedback welcome.
>
> -Ben
|
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jan-Eric Duden | Never mind... the code actually does it...
The ensure_size function is really messy. ;)
--
Jan-Eric Duden
"Jan-Eric Duden" <jeduden@whisset.com> wrote in message
news:c77hm4$26dd$1@digitaldaemon.com...
> Shouldn't the capacity of the deque grow exponentially?
>
> Right now, complexity of adding elements is O(n) where n is the size of
the
> deque. (because of the copying)
> If the capacity of deque grows exponentially it is only O(log n).
> AFAIK the STL does the same.
> --
> Jan-Eric Duden
>
> "Ben Hinkle" <bhinkle4@juno.com> wrote in message news:c770lv$1cbm$1@digitaldaemon.com...
> > For those who can't wait for DTL, or for those who just need a simple double-ended queue, I've put a deque.d at
> >
> > http://home.comcast.net/~benhinkle/deque.d
> >
> > It is implemented as a single dynamic array so slicing and manipulating
it
> > like an array is very easy and "D-like". I figured no iterator is needed for it. The resizing algorithm is the messiest part but right now it is pretty simple. I looked around on the web a little before making it so apologies someone already wrote a deque and I missed it. Feedback
welcome.
> >
> > -Ben
>
>
|
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jan-Eric Duden | Jan-Eric Duden wrote:
> Never mind... the code actually does it...
> The ensure_size function is really messy. ;)
The scary part is I had a version that was a lot messier and decided to go with the "simple" version. It checks if there is already enough space and slop if there is it centers the data without reallocating and otherwise it reallocates. Plus whenever it reallocates it recenters the data when copying the data to the new array. The scary version was the one that tries to copy the data more to one side or the other depending on which end is growing faster and by how much (assuming past trends predict future trends).
I've never looked at what STL impls do - well, ok, I've opened up the files but talk about a mess ;-)
|
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | "Ben Hinkle" <bhinkle4@juno.com> wrote in message news:c781a6$2t5j$1@digitaldaemon.com... > Jan-Eric Duden wrote: > > > Never mind... the code actually does it... > > The ensure_size function is really messy. ;) > > The scary part is I had a version that was a lot messier and decided to go with the "simple" version. It checks if there is already enough space and slop if there is it centers the data without reallocating and otherwise it reallocates. Plus whenever it reallocates it recenters the data when copying the data to the new array. The scary version was the one that tries > to copy the data more to one side or the other depending on which end is growing faster and by how much (assuming past trends predict future trends). Good descision. Now, it's almost obvious what it does. :) > > I've never looked at what STL impls do - well, ok, I've opened up the files > but talk about a mess ;-) > I never understood, how the authors of the STL can actually understand their code and keep it bug free. I hope the authors of the DTL will produce nice code. :) |
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | >I've never looked at what STL impls do - well, ok, I've opened up the files but talk about a mess ;-)
This is a bit off topic, but I once found myself chasing a compile error through hundreds of lines of STL code. I was somwhere between pulling my hair out in frustration and going blind from the unmaintainable mess it was when I found out what was wrong: the Visual Studio 6 compiler has the world's most hoplessly broken template implementation.
Thank goodness for D with built in arrays and gc.
|
May 04, 2004 Re: double-ended queue (deque) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jan-Eric Duden | "Jan-Eric Duden" <jeduden@whisset.com> wrote in message news:c78cnc$cro$1@digitaldaemon.com... > "Ben Hinkle" <bhinkle4@juno.com> wrote in message news:c781a6$2t5j$1@digitaldaemon.com... > > Jan-Eric Duden wrote: > > > > > Never mind... the code actually does it... > > > The ensure_size function is really messy. ;) > > > > The scary part is I had a version that was a lot messier and decided to go with the "simple" version. It checks if there is already enough space and slop if there is it centers the data without reallocating and otherwise it reallocates. Plus whenever it reallocates it recenters the data when copying the data to the new array. The scary version was the one that > tries > > to copy the data more to one side or the other depending on which end is growing faster and by how much (assuming past trends predict future trends). > Good descision. Now, it's almost obvious what it does. :) > > > > > I've never looked at what STL impls do - well, ok, I've opened up the > files > > but talk about a mess ;-) > > > I never understood, how the authors of the STL > can actually understand their code and keep it bug free. > I hope the authors of the DTL will produce nice code. :) You need have no worries there. I've been fighting "flavours" of STL for years. I don't intend to inflict the same degree of pain on DTL users/maintainers/enhancers |
Copyright © 1999-2021 by the D Language Foundation