zoukankan      html  css  js  c++  java
  • append对len和cap的影响

    package main
    
    import "fmt"
    
    func main() {
          var numbers []int
          printSlice(numbers)
    
    	/* 允许向空切片追加元素 */
          numbers = append(numbers, 0)
          printSlice(numbers)
    
    	/* 向切片添加一个元素 */
          numbers = append(numbers, 1)
          printSlice(numbers)
    
    	/* 再向切片添加一个元素 */
          numbers = append(numbers, 1)
          printSlice(numbers)
    
    	/* 同时添加多个元素 */
          numbers = append(numbers, 2,3,4)
          printSlice(numbers)
    
    }
    func printSlice(x []int){
          fmt.Printf("len=%d cap=%d slice=%v
    ",len(x),cap(x),x)
    }
    
    

    Output:

    len=0 cap=0 slice=[]
    len=1 cap=1 slice=[0]
    len=2 cap=2 slice=[0 1]
    len=3 cap=4 slice=[0 1 1]
    /*
    上面:每次cap改变的时候指向numbers内存的指针都在变化。当在使用 append 的时候,如果 cap==len 了这个时候就会新开辟一块更大内存,
    然后把之前的数据复制过去(实际go在append的时候放大cap是有规律的。在 cap 小于1024的情况下是每次扩大到 2 * cap ,当大于1024之后
    就每次扩大到 1.25 * cap 。所以上面的测试中cap变化是 1, 2, 4, 8)。
    */
    //下面:len=3+3 cap=4+4
    len=6 cap=8 slice=[0 1 1 2 3 4]
    
  • 相关阅读:
    H5 20-属性选择器上
    H5 19-序选择器下
    H5 18-序选择器
    算法基础部分整理-《图解算法》
    iOS 内存管理之属性关键字
    多线程 ---基础定义部分
    Mongodb基本命令总结
    MySQL四种隔离级别和MVCC
    python同步原语--线程锁
    python进程间通信--信号Signal
  • 原文地址:https://www.cnblogs.com/wangjiaoshou/p/13070106.html
Copyright © 2011-2022 走看看