gpt4 book ai didi

arrays - 为什么 slice 的容量会变化?不应该一样吗?

转载 作者:行者123 更新时间:2023-12-03 10:07:21 25 4
gpt4 key购买 nike

我是一个新手,这个例子让我感到困惑:

import "fmt"

func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)

// Slice the slice to give it zero length.
s = s[:0]
printSlice(s)

// Extend its length.
s = s[:4]
printSlice(s)

// Drop its first two values.
s = s[2:]
printSlice(s)
}

func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
输出:
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]
为什么最后一个容量变为4?根据定义,容量是基础数组的长度。

最佳答案

Slice建立在数组上,它由一个指向数组的指针,段的长度及其容量(段的最大长度)组成。
关键是segment,而不是array

    s = s[2:]
当您删除前两个值时, s从第三个元素开始,成为指向数组另一半段的 slice ,因此其上限为 4
就像您无法通过 s[-1]指向数组的前一部分一样,该部分也不能计入 cap中。
引用: https://blog.golang.org/slices-intro

关于arrays - 为什么 slice 的容量会变化?不应该一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65517450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com