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

切片容量翻倍

切片容量翻倍

Go
POPMUISE 2022-10-04 19:03:22
我正在学习戈兰语,同时使用以下代码练习切片:package mainimport "fmt"func main() {    var count int    var subject string    subjects := make([]string, 0)    fmt.Print("Enter total number of subjects:")    fmt.Scan(&count)    for count != 0 {        fmt.Print("\n\nEnter subject name: ")        fmt.Scan(&subject)        subjects = append(subjects, subject)        fmt.Printf("\nlen=%d \ncap=%d \n%v\n", len(subjects), cap(subjects), subjects)        count--    }}以下是结果,我得到:输入主题名称:物理len=4 帽=4 [印地语英语数学物理]输入主题名称:地理位置len=5 cap=8 [印地语 英语 数学 物理 地理]为什么容量在5日翻倍,以及如何按适当的顺序增加容量
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

在这种情况下,“适当顺序”不适用。Go 片由一个数组支持,每次达到容量时附加到该数组时,都需要复制该数组。通过制作更大容量的数组,Go试图最大限度地减少许多复制操作,从而使功能的性能更高。append


如果您事先知道许多元素,则可以使用它来设置初始容量:


fmt.Print("Enter total number of subjects:")

fmt.Scan(&count)


subjects := make([]string, 0, count)

Go 不会增大底层阵列,除非您超过初始容量。


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 54 浏览
慕课专栏
更多

添加回答

举报

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