On Tue, 25 Oct 2011 05:51:25 -0400, bearophile <bearophileh...@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

Reply via email to