開発環境
- 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() {
elem := "要素"
slice := []string{}
capacity := cap(slice)
fmt.Printf("容量: %v\n", capacity)
for i := 0; i < 10000; i++ {
slice = append(slice, elem)
if cap(slice) > capacity {
capacity = cap(slice)
fmt.Printf("容量: %v\n", capacity)
}
}
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./capacity.go
容量: 0
容量: 1
容量: 2
容量: 4
容量: 8
容量: 16
容量: 32
容量: 64
容量: 128
容量: 256
容量: 512
容量: 1024
容量: 1280
容量: 1704
容量: 2560
容量: 3584
容量: 4608
容量: 6144
容量: 7680
容量: 9728
容量: 12288
%
append関数は途中までスライスの容量(基底配列の長さ)を2倍にするけど、途中からは2倍になっていない。メモリー容量、効率性を重視してそういう実装か言語仕様になってるのかも。
0 コメント:
コメントを投稿