removing an item from a dynamic array

simendsjo simendsjo at gmail.com
Tue Oct 25 10:10:55 PDT 2011


On 25.10.2011 18:23, Dmitry Olshansky wrote:
> 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.

If it's not a bug, there's a bug in the documentation (see my previous post)


More information about the Digitalmars-d-learn mailing list