Maison >développement back-end >Golang >Go est l'équivalent du memset de C : comment initialiser efficacement des tableaux avec des valeurs non nulles ?

Go est l'équivalent du memset de C : comment initialiser efficacement des tableaux avec des valeurs non nulles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 00:38:13737parcourir

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

Aller équivalent au memset de C

Question originale :

Y a-t-il une méthode dans Go, cela est analogue à la fonction memset de C, qui permet une initialisation efficace des tableaux avec des valeurs non nulles valeurs ?

Réponse :

Go ne propose pas d'équivalent direct à memset dans sa bibliothèque standard. Cependant, plusieurs approches peuvent obtenir des fonctionnalités similaires :

Solution basée sur une boucle :

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}

Cette boucle simple parcourt un tableau et attribue la valeur v à chaque élément.

Solution optimisée utilisant copy() :

Go's La fonction copy() est hautement optimisée et peut être utilisée à cette fin :

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])
    }
}

Cette solution définit le premier élément manuellement, puis copie à plusieurs reprises la partie initialisée du tableau sur les éléments restants.

Comparaison des performances :

Les benchmarks montrent que la solution memsetRepeat surpasse l'approche basée sur des boucles pour les tableaux plus grands en raison de la fonction copy() optimisée.

Pour résumer, les programmeurs Go peuvent utiliser soit la solution basée sur des boucles pour plus de simplicité, soit la solution optimisée memsetRepeat pour améliorer les performances lors de l'initialisation de tableaux avec des valeurs non nulles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn