一尘不染

heap,list和vector. 哪个更适合实现队列?

go

任何人都可以为简单快速的 FIF/队列推荐 Go 容器,Go 有 3 个不同的容器:heap,list和vector. 哪个更适合实现队列?


阅读 190

收藏
2021-12-22

共2个答案

一尘不染

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

2021-12-22
一尘不染

事实上,如果您想要的是一个基本且易于使用的先进先出队列,那么 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 !")
}

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

2021-12-22