D 中的队列类型?
Queue type in D?
许多语言都有队列类型(http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html);我什至找不到实现队列类型(先进先出数据结构)的库。没有队列让我感到惊讶。 D做队列有不同的方式吗?
我期望的语法与此类似:
//To create
Queue!string queue = new Queue!string;
//To add
queue.add("value");
//To access
string value = queue.get; //will remove from queue
//or
foreach (string value; queue) {}
这在 D 中如何完成?还是我需要自己实施?
目前在 D 的标准库中的容器在 std.container 中。虽然它们有点稀疏。对它们的重新设计正在进行中,但已经有一段时间了,谁知道什么时候会完成。因此,不幸的是,D 的标准库在容器领域有点薄弱。也就是说,您可以使用 std.container.dlist.DList
作为队列。这是一个双向链表,这通常是队列在内部实现的方式,即使那不是它们公开的 API。
或者,http://code.dlang.org 有几个带容器的包裹。
但我建议从 DList
开始,看看它对您需要的效果如何。如果您正在寻找基本队列,它应该可以正常工作。只需使用 insertBack
将内容放在末尾,使用 front
获取第一个元素,使用 removeFront
删除前面的项目。如果你想要一个强制队列的API,你可以用你自己的类型包装一个DList
。
许多语言都有队列类型(http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html);我什至找不到实现队列类型(先进先出数据结构)的库。没有队列让我感到惊讶。 D做队列有不同的方式吗?
我期望的语法与此类似:
//To create
Queue!string queue = new Queue!string;
//To add
queue.add("value");
//To access
string value = queue.get; //will remove from queue
//or
foreach (string value; queue) {}
这在 D 中如何完成?还是我需要自己实施?
目前在 D 的标准库中的容器在 std.container 中。虽然它们有点稀疏。对它们的重新设计正在进行中,但已经有一段时间了,谁知道什么时候会完成。因此,不幸的是,D 的标准库在容器领域有点薄弱。也就是说,您可以使用 std.container.dlist.DList
作为队列。这是一个双向链表,这通常是队列在内部实现的方式,即使那不是它们公开的 API。
或者,http://code.dlang.org 有几个带容器的包裹。
但我建议从 DList
开始,看看它对您需要的效果如何。如果您正在寻找基本队列,它应该可以正常工作。只需使用 insertBack
将内容放在末尾,使用 front
获取第一个元素,使用 removeFront
删除前面的项目。如果你想要一个强制队列的API,你可以用你自己的类型包装一个DList
。