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