有队列实现吗?

新手上路,请多包涵

谁能建议 Go 容器用于简单快速的 FIF/队列,Go 有 3 个不同的容器: heaplistvector 哪个更适合实现队列?

原文由 rev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 442
2 个回答

vector 或 list 都应该工作,但 vector 可能是可行的方法。我这样说是因为 vector 的分配频率可能低于 list 并且垃圾收集(在当前的 Go 实现中)相当昂贵。不过,在一个小程序中,这可能无关紧要。

原文由 Evan Shaw 发布,翻译遵循 CC BY-SA 2.5 许可协议

事实上,如果你想要的是一个基本且易于使用的 fifo 队列,slice 提供了你所需要的一切。

 queue := make([]int, 0)
// Push to the queue
queue = append(queue, 1)
// Top (just get next element, don't remove it)
x = queue[0]
// Discard top element
queue = queue[1:]
// Is empty ?
if len(queue) == 0 {
    fmt.Println("Queue is empty !")
}

当然,我们假设我们可以信任追加和切片的内部实现,从而避免无用的调整大小和重新分配。对于基本用法,这已经足够了。

原文由 Marwan Burelle 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题