removing an item from a dynamic array

simendsjo simendsjo at gmail.com
Tue Oct 25 03:13:09 PDT 2011


On 25.10.2011 11:51, bearophile wrote:
> maarten van damme:
>
>> import std.algorithm;
>> struct Loc {
>> uint row;
>> uint col;
>> }
>> void main(){
>> Loc[] testArray;
>> Loc a={3,2};
>> Loc b={5,3};
>> testArray~=a;
>> testArray~=b;
>> remove(testArray,a);
>> }
>> gives the same error
>
> The second argument of remove() needs to be an index, a size_t.
>
> This works:
>
> import std.stdio, std.algorithm;
> struct Loc {
>      uint row, col;
> }
> void main() {
>      auto a = Loc(3, 2),
>           b = Loc(5, 3);
>      auto data = [a, b];
>      writeln(remove(data, 0));
>      writeln(data);
> }
>
>
> It prints:
> [Loc(5, 3)]
> [Loc(5, 3), Loc(5, 3)]
>
> So curiously remove() doesn't work in-place, I think this is a bug or a design bug.
>
> Bye,
> bearophile

Yes, probably a bug. This example from the documentation fails:
import std.stdio, std.algorithm;
void main() {
     int[] a = [ 0, 1, 2, 3 ];
     assert(remove!(SwapStrategy.unstable)(a, 1) == [ 0, 3, 2 ]);
}


More information about the Digitalmars-d-learn mailing list