部分代码如下:
const ESTIMATEDSIZE = 10000
var init_arr = [...]int{1,1,2,3,5,8,13}
var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE)
}
在c++中没有像
reserved
那样的vector
函数,用于切片fibbo
为切片保留ESTIMATEDSIZE
以减少扩展容量的复制时间。所以我只能在初始化时将 ESTIMATEDSIZE 分配给容量。但以下都不合法。
var fibbo []int = init_arr[::ESTIMATEDSIZE]
var fibbo []int = make([]int{1,1,2,3,5,8,13}, len(init_arr), ESTIMATEDSIZE)
这道题有什么方法吗?或者可能是笨拙的代码如下是唯一的方法?
var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE)
for i:= range init_arr {
fibbo[i] = init_arr[i]
}
不,这是不可能的。这是 Go 设计理念的一部分,它为这个设计决策提供了信息:“不要隐藏复杂性。”
您的“笨拙”代码实际上是在 Go 中执行此操作的首选和惯用方式,只需一个小改动:
var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE)
for i := range init_arr {
fibbo[i] = init_arr[i]
}
(除了格式化),我所做的唯一更改是从
var
声明中删除类型,因为这完全是多余的。换句话说:
-var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE)
+var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE)