关于slice和cap一点疑问
来源:3-2 切片的概念

weixin_慕前端7300507
2020-08-10
在讲解切片的cap概念时,s1 := arr[2:6],可以理解为从arr[2]开始切到arr[6],其value为[2, 3, 4, 5],其cap为6,此时可以理解为s1[0] == 2,s1[3] ==5,即len(s1) == 4,在Println(s1[3:6])的时候应该是打印s1[3] – s1[6],此时的s1[4] == arr[6] , s1[5] == arr[7] s1[6] ==arr[8],根据左闭右开,这里能取到s1[3:6],取不到s1[3:7]是可以理解的,切片在不指定cap大小时,继承原数组cap,而这和cap这个容量的概念有什么关系呢?如果说对arr这个数组来说,其len == cap ,我在使用s5 := arr[0:3:10]时,提示超过数组界限,也就是说cap这个概念在切片中,只是提供了一个后扩的功能,限制了后扩的数量,对数组本身是意义不大的是吗?
写回答
1回答
-
ccmouse
2020-08-18
cap对于程序逻辑意义不大。逻辑上主要考虑len。性能上我们如果不断往slice中添加元素的话,底层的数组最好预先分配,也就是cap要比len大。
下一章3-3 切片的操作中,我会详细讲解系统在append时分配空间的方式。
00
相似问题