Go C の memset と同等
元の質問:
メソッドはありますかGo では C の memset 関数に似ており、配列の効率的な初期化を可能にします。ゼロ以外の値を使用しますか?
答え:
Go は、標準ライブラリで memset と直接同等のものを提供しません。ただし、同様の機能を実現できるアプローチがいくつかあります。
ループベースのソリューション:
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
この単純なループは配列を反復処理し、値 v を割り当てます。
を使用して最適化されたソリューションcopy():
Go の copy() 関数は高度に最適化されており、次の目的に利用できます。
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
このソリューションでは、最初の要素を手動で設定し、その後、要素を繰り返しコピーします。配列の初期化された部分を残りの要素に配置します。
パフォーマンス比較:
ベンチマークは、最適化された copy() 関数により、memsetRepeat ソリューションが、より大きな配列に対するループベースのアプローチよりも優れていることを示しています。
要約すると、Go プログラマーは、シンプルにするループベースのソリューション、またはゼロ以外の値で配列を初期化する際のパフォーマンスを向上させる最適化された memsetRepeat ソリューション。
以上がGo の C の memset に相当: ゼロ以外の値で配列を効率的に初期化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。