On Tuesday, 13 August 2019 at 18:28:35 UTC, Ali Çehreli wrote:
> can't I define an array of fixed size, which is dependent on
the input
> of the function?
arr.length = number_of_elements;
All elements will be initialized to the element's default
value, which happens to be null for pointers. (If we are back
to linked list Node pointers.)
However, I wouldn't bother with setting length either as the
cost of automatic array resizing is amortized, meaning that it
won't hurt the O(1) algorithmic complexity in the general case.
In the GC case that D uses, it will be even better: because if
the GC knowns that the neighboring memory block is free, it
will just add that to the dynamic array's capacity without
moving elements to the new location.
For the application I am writing, it makes very much sense to use
a DLL. The approach I am using right now is to: (as stated in the
first post)
void bsort(DLL* list) {
Node*[] nodes;
foreach (i; 0 .. list.size)
nodes ~= get_node(list, i);
nodes.sort!("a.x < b.x");
// (unrelated data structure cleaning up goes here)
}
My concern was that using a dynamic array, continuously appending
to it despite known size, would greatly impact overall
performance. My goal is to make this operation as fast as
possible, the D way.
I tried setting the length first and iterating through it with
`nodes[i] = ...` and the implementation did not run noticeably
faster (10 trials), per Teoh's advice to test out the difference.
For now, I consider this a success and would like to thank
everyone in the thread for assistance and valuable insights.
Though, it left me with some semi-offtopic questions unanswered:
(1) Ali, do you mean that from an optimization viewpoint, it's
better to keep appending like `nodes ~= ...` instead of setting
the length first? I would like to have some more background on
that claim.
(2) I watched the talk and read the paper [1] to be sure. Many
contributors to this thread claim (C++) vectors are nearly always
the preferred choice compared to DLLs, but how come they are much
faster compared to DLLs, given they have nearly the same
functionality?
(3) And I sense this is very closely related to what Ali is on?
[1] http://www.stroustrup.com/Software-for-infrastructure.pdf