On Friday, 1 April 2016 at 01:09:32 UTC, Ali Çehreli wrote:
On 03/31/2016 05:34 PM, learner wrote:
Hi,
I have the following code in C++.
rectangles.erase(rectangles.begin() + index);
where rectangles is:
std::vector<Rectangle> rectangles;
how can I do something similar in D.
Learner.
import std.stdio;
void main() {
int[] a = [ 1, 2, 3, 4, 5 ];
writefln("Before: %s", a);
size_t index = 2;
a = a[index .. $]; // <-- HERE
writefln("After : %s", a);
}
Note that it's a cheap operation; the elements are still in
memory and not destroyed. If you want to run their destructors
you can call destroy() explicitly:
import std.stdio;
import std.algorithm;
import std.range;
struct Rect {
int i;
~this() {
writefln("Destroying %s", i);
}
}
void main() {
Rect[] a = iota(5).map!(i => Rect(i)).array;
writefln("Before: %s", a);
size_t index = 2;
// If you need to run the destructors now:
a[0 .. index].each!((ref e) => e.destroy);
a = a[index .. $];
writefln("After : %s", a);
}
Prints
Destroying 0
Destroying 1
Destroying 2
Destroying 3
Destroying 4
Before: [Rect(0), Rect(1), Rect(2), Rect(3), Rect(4)]
Destroying 0
Destroying 1
After : [Rect(2), Rect(3), Rect(4)]
Ali
thanks