[rosettacode] std.container.DList problems
bearophile via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Mar 4 02:37:30 PST 2015
This code used to work in DMD 2.065:
http://rosettacode.org/wiki/Strand_sort#D
import std.stdio, std.container;
DList!T strandSort(T)(DList!T list) {
static DList!T merge(DList!T left, DList!T right) {
DList!T result;
while (!left.empty && !right.empty) {
if (left.front <= right.front) {
result.insertBack(left.front);
left.removeFront();
} else {
result.insertBack(right.front);
right.removeFront();
}
}
result.insertBack(left[]);
result.insertBack(right[]);
return result;
}
DList!T result, sorted, leftover;
while (!list.empty) {
leftover.clear();
sorted.clear();
sorted.insertBack(list.front);
list.removeFront();
foreach (item; list) {
if (sorted.back <= item)
sorted.insertBack(item);
else
leftover.insertBack(item);
}
result = merge(sorted, result);
list = leftover;
}
return result;
}
void main() {
auto lst = DList!int([-2,0,-2,5,5,3,-1,-3,5,5,0,2,-4,4,2]);
foreach (e; lst.strandSort)
write(e, " ");
}
Now it gives a runtime error like
"phobos\std\container\dlist.d(329): DList.front: List is empty".
I think the cause is that "list = leftover;" has a different
semantics. Is this a regression fit for Bugzilla?
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list