removing an item from a dynamic array

Steven Schveighoffer schveiguy at yahoo.com
Wed Oct 26 04:35:02 PDT 2011


On Tue, 25 Oct 2011 05:51:25 -0400, bearophile <bearophileHUGS at lycos.com>  
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.

 From the documentation:

"The original array has remained of the same length because all functions  
in std.algorithm only change content, not topology."

In other words, remove just moves unwanted elements to the back of the  
array, then returns the front of it.

It looks like it works as designed.

-Steve


More information about the Digitalmars-d-learn mailing list