我正在尝试使用 slice 在Go中实现一个非常简单的队列。这是我必须排入五个值然后丢弃前两个值的代码:
package main
import (
"fmt"
)
var (
localQ []int
)
func main() {
fmt.Printf("%v %v\n", localQ, len(localQ))
for i := 0; i< 5; i++ {
localQ = enqueue(localQ, i)
fmt.Printf("%v %v\n", localQ, len(localQ))
}
localQ = dequeue(localQ, 2)
fmt.Printf("%v %v\n", localQ, len(localQ))
}
func enqueue(q []int, n int) ([]int) {
q = append(q, n)
return q
}
func dequeue(q []int, s int) ([]int) {
r := q[s:]
q = nil
return r
}
有关出队功能的两个问题:
1-我正在尝试确保将弹出的物品丢弃并进行垃圾收集。此功能是否导致它们被垃圾回收?
2-
r := q[s:]
的时间和空间复杂度是多少?我知道每个 slice 下都有一个数组。是否要复制数组值?还是只是被复制的指针? 最佳答案
此功能是否导致它们被垃圾回收?
如果应用程序加入足够数量的元素以导致重新分配 slice 支持数组,则先前的支持数组(及其元素)将有资格进行收集。
r:= q [s:]的时间和空间复杂度是多少?
这是O(1)操作。该操作不会在堆上分配内存。