removing an item from a dynamic array

Dmitry Olshansky dmitry.olsh at gmail.com
Tue Oct 25 09:23:28 PDT 2011


On 25.10.2011 13: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

No, it's not a bug. It's the same as c++ STL remove - it operates on 
range but not on container. To shrink container, update it's length.
-- 
Dmitry Olshansky


More information about the Digitalmars-d-learn mailing list