我认为动态数组在D语言中是向量的替代品,但似乎它们没有删除函数(只有关联数组有),这对于向量来说是相当有限制的,因此我想知道我是否理解正确。如果我有一个如下所示的数组,
uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
我发现唯一的删除第二个元素的方法是:
a = a[0..1] ~ a[2];
但这似乎不太对(也许只是因为我还不理解所有的内容)。那么是否有向量,是否有另一种从动态数组中删除元素的方法呢?
谢谢。
std.algorithm.remove()
,它不仅适用于数组,还适用于通用范围。 例如:import std.algorithm;
void main() {
uint[] a = [1, 2, 3];
a = a.remove(1);
assert(a == [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
。
std.container.Array
一样实现内置数组? - Peter Alexanderstd::vector
通常只分配多达50%的内存(因此平均为25%),这并不太奢侈。我更喜欢它每隔一段时间分配更多的内存,而不是在每次连接时都进行分配。 - Peter Alexander