首頁 > 後端開發 > Golang > Go 相當於 C 的 memset:如何有效率地初始化非零值陣列?

Go 相當於 C 的 memset:如何有效率地初始化非零值陣列?

Mary-Kate Olsen
發布: 2024-12-20 00:38:13
原創
640 人瀏覽過

Go's Equivalent to C  's memset: How to Efficiently Initialize Arrays with Non-Zero Values?

Go 相當於C 的memset

原問題:

原問題:

原問題:

有方法在Go中,它類似於C 的memset 函數,它允許使用以下命令有效地初始化數組非零值?

答案:
func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
登入後複製

Go 在其標準庫中沒有提供與 memset 直接等效的功能。然而,有幾種方法可以實現類似的功能:

基於循環的解決方案:

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])
    }
}
登入後複製
這個簡單的循環迭代數組並分配值v到每個元素。

最佳化解決方案使用copy():

Go 的copy() 函數經過高度最佳化,可用於此目的:

此解決方案手動設定第一個元素,然後重複複製將陣列的初始化部分放到剩餘元素上。

效能比較:基準測試表明,由於最佳化了 copy() 函數,memsetRepeat 解決方案在處理較大數組時優於基於循環的方法。 總而言之,Go 程式設計師可以使用基於循環的解決方案可實現簡單性,或者優化的 memsetRepeat 解決方案可在初始化具有非零值的陣列時提高效能。

以上是Go 相當於 C 的 memset:如何有效率地初始化非零值陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板