D中的向量和动态数组

时间:2010-10-10 17:10:15

标签: arrays vector d

我认为动态数组是D中矢量的替代,但似乎它们没有删除函数(只有关联数组才有),这对于矢量来说是一个限制,所以我想知道我是否已经得到了对。如果a有一个如下的数组,

uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;

然后,我发现删除第二个元素的唯一方法是,

a = a[0..1] ~ a[2];

但这似乎并不正确(但也许只是因为我还不了解这一点)。那么有一个向量,还有另一种从动态数组中删除元素的方法吗?

感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用std.algorithm.remove(),它不仅适用于数组,还适用于通用范围。例如:

import std.algorithm;

void main() {
    uint[] a = [1, 2, 3];
    a = a.remove(1);
    assert(a == [1, 3]);
}

答案 1 :(得分:3)

std.container中有一个Array!T模板,与C ++中的std::vector非常相似。

Array!int a = [0, 1, 2, 3];
a.linearRemove(a[1..3]);
assert(equal(a, [0, 3]));

不幸的是,它似乎没有单独的删除方法,尽管您可以始终将linearRemove与单一范围一起使用。