问题
- 始终觉得slice的定义只需要len即可,cap有什么好处呢?
答案
- cap主要是为了让slice提供可变长度。
试想,如果没有cap,只有len。
sliceA长度为10,len=10,已经插满元素;现在要插入第十一个元素。- 做法
sliceA的长度扩展为20,len=20,此时有用元素为11个,还有9个空位。
sliceA对外界暴露出来的接口只有ptr和len=20,此时如果需要再插入一个元素。
到底sliceA应该扩展呢还是可以继续在原来的基础直接插入呢,同时应该从哪个index插入呢?
这些问题在有了len和cap的组合之后就可以迎刃而解了。
- 做法
有疑问加站长微信联系(非本文作者)

cap就是方便扩容的.
如果单纯只有ptr和len, 内部还要有一个变量A来记录slice的元素个数, 这样每次插入的时候都会对变量A自增并且判断是否大于len, 但在此时, 也会对len自增的, 这样就会有多次的赋值操作.
有了cap后, 就可以避免了对上面粗体的维护变量A的步骤, 单纯的判断是否要扩容就ok, 效率提高了.