On 01/30/2017 01:33 PM, albert-j wrote:
On Monday, 30 January 2017 at 12:31:33 UTC, albert-j wrote:
OK, got it. Can you do removal without reallocation with
std.container.array?
Array!int arr;
foreach (i; 0..10) arr ~= i;
Sorry, sent too early.
arr = arr[].remove!(x=> x > 5); //Doesn't work withouth calling
.Array!int
Looks like it can't be done in that straight-forward manner. But you can
do the `remove` and then update just `arr`'s length:
----
void main()
{
import std.container: Array;
import std.algorithm: equal, remove;
Array!int arr;
foreach (i; 0..10) arr ~= i;
const oldAddress = &arr[0];
arr.length = arr[].remove!(x=> x > 5).length;
assert(equal(arr[], [0, 1, 2, 3, 4, 5])); /* holds */
assert(&arr[0] is oldAddress); /* holds */
}
----
Maybe std.container.Array can be improved somehow to simplify this. But
I'm not sure about the details.