On Saturday, 22 June 2013 at 07:48:25 UTC, qznc wrote:
On Monday, 14 November 2011 at 06:15:18 UTC, SimonM wrote:
On 2011/11/14 02:10 AM, bearophile wrote:
SimonM:
2009, 27 April:
http://www.digitalmars.com/d/archives/digitalmars/D/std.algorithm.BinaryHeap_88811.html
See the working version:
http://rosettacode.org/wiki/Huffman_coding#D
Bye,
bearophile
Okay, I looked at the example, and it seems that the only
reason it works is because that piece of code never requires
the array's length to grow larger than it's initial length (at
the start of the loop, 2 elements are taken out, and at the
end, only one is inserted back in).
If I try using a BinaryHeap with a range, then, like the
documentation mentions, I can't grow that BinaryHeap any
larger than it's initial size, because I got the following
error: "Cannot grow a heap created over a range". But somehow
I can't get it working with an Array!(T) like the
documentation implies it should be capable of?
Is this problem resolved? I cannot produce a growable
BinaryHeap myself.
Ok, got it. Instead of using a dynamic array directly, wrapping
it into a std.container.Array works.
import std.container: Array, heapify;
Foo[] arr = ...;
auto wrapped = Array!Foo(arr);
auto queue = heapify(wrapped);
In general, other containers should work as well, since
containers provide an insertBack method whereas the builtin
arrays/ranges do not.