为了账号安全,请及时绑定邮箱和手机立即绑定

Golang中追加的大O

Golang中追加的大O

Go
UYOU 2021-06-14 09:02:09
Go 内置append函数的复杂度是多少?字符串连接如何使用+?我想通过添加不包括该元素的两个切片来从切片中删除一个元素,例如。http://play.golang.org/p/RIR5fXq-Sfnums := []int{0, 1, 2, 3, 4, 5, 6, 7}fmt.Println(append(nums[:4], nums[5:]...))=> [0 1 2 3 5 6 7]http://golang.org/pkg/builtin/#append表示如果目的地有足够的容量,那么该切片是resliced. 我希望“重新切片”是一个恒定的时间操作。我也希望同样适用于使用+.
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

这一切都取决于所使用的实际实现,但我基于标准 Go 和 gccgo。

切片

重新切片意味着更改结构中的整数(切片是具有三个字段的结构:长度、容量和指向后备内存的指针)。

如果切片没有足够的容量,则 append 将需要分配新内存并复制旧内存。对于 <1024 个元素的切片,它将使容量加倍,对于具有 >1024 个元素的切片,它将增加 1.25 倍。

字符串

由于字符串是不可变的,每个字符串连接+都会创建一个新字符串,这意味着复制旧字符串。因此,如果您在循环中执行 N 次,您将分配 N 个字符串并复制 N 次左右的内存。


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信