谁能建议 Go 容器用于简单快速的 FIF/队列,Go 有 3 个不同的容器: heap
, list
和 vector
哪个更适合实现队列?
原文由 rev 发布,翻译遵循 CC BY-SA 4.0 许可协议
事实上,如果你想要的是一个基本且易于使用的 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 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答2.2k 阅读
1 回答2.2k 阅读
1 回答1.5k 阅读
vector 或 list 都应该工作,但 vector 可能是可行的方法。我这样说是因为 vector 的分配频率可能低于 list 并且垃圾收集(在当前的 Go 实现中)相当昂贵。不过,在一个小程序中,这可能无关紧要。