赞
踩
切片是struct结构,又称为动态数组,
type slice struct { arrary unsafe.Pointer len int cap int }
两个关注点
怎么使用:
// 1. 生成一个空切片,并且初始元素个数为n,默认值为对应类型的空值,比如int为0。c为容量 s := make([]int, 10, 20) // 2. 空切片 nil,不分配内存 var s [] int // 3. 通过数组创建 var t = s[5:9]
s := make([]int, 0, 20) // 此操作在容量不够的情况下会自动扩容 // 扩容时,会分配比现在更大的内存,然后将原来的元素拷贝到新分配的空间;最后添加新值 // 扩容策略,当小于1024时,扩大为原来2倍容量。相当于原来100,扩容后200 // 当容量大于等于1024时,通常会扩容到原来1.25倍, // 具体扩容时,还会考虑元素类型与内存分配规则,对实际扩张值做一些微调 s = append(s, 1)
slice[n] 可通过下标直接访问对应的元素
通过切片获取另一个切片时,生成的切片和源切片共享底层数据组
s := make([]int, 5, 10) // cap(a) 为 cap(s)-3 也就是 7 a := s[3:5] // cap(b) 为2 b := s[3:5:5]
关于越界问题:
切片的越界和容量有关,当下标超过切片容量时,会触发panic
其他说明:
切片进行切取时,子切片和原来的切片会共享底层的数组空间,因此在使用子切片时,如果需要对子切片进行修改,最好通过copy的方式进行拷贝后操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。