開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 4(コレクション)、LESSON 18(もっと大きなスライス)の練習問題の解答を求めてみる。
コード
package main
import "fmt"
func main() {
zeros := []int{}
c := cap(zeros)
for i := 0; i < 10000; i++ {
zeros = append(zeros, 0)
t := cap(zeros)
if c != t {
fmt.Println(c, t, float64(t)/float64(c))
c = t
}
}
}
入出力結果(Zsh、PowerShell、Terminal)
% go build capacity.go
% ./capacity
0 1 +Inf
1 2 2
2 4 2
4 8 2
8 16 2
16 32 2
32 64 2
64 128 2
128 256 2
256 512 2
512 1024 2
1024 1280 1.25
1280 1696 1.325
1696 2304 1.3584905660377358
2304 3072 1.3333333333333333
3072 4096 1.3333333333333333
4096 5120 1.25
5120 7168 1.4
7168 9216 1.2857142857142858
9216 12288 1.3333333333333333
% ./capacity
0 1 +Inf
1 2 2
2 4 2
4 8 2
8 16 2
16 32 2
32 64 2
64 128 2
128 256 2
256 512 2
512 1024 2
1024 1280 1.25
1280 1696 1.325
1696 2304 1.3584905660377358
2304 3072 1.3333333333333333
3072 4096 1.3333333333333333
4096 5120 1.25
5120 7168 1.4
7168 9216 1.2857142857142858
9216 12288 1.3333333333333333
%
基底配列が容量不足になったとき、append関数は常に容量を2倍にするわけではない。
0 コメント:
コメントを投稿