Maison  >  Article  >  développement back-end  >  Comment passer un std::array de taille inconnue à une fonction en C ?

Comment passer un std::array de taille inconnue à une fonction en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 19:04:30941parcourir

How to Pass an std::array of Unknown Size to a Function in C  ?

Passer un std::array de taille inconnue à une fonction

En C , comment pouvez-vous créer une fonction qui accepte un std : :array d'un type connu, mais d'une taille inconnue ?

Considérons l'exemple suivant :

<code class="cpp">void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Étant donné cette fonction, vous pouvez créer std::arrays de différentes tailles et les transmettre à mulArray :

<code class="cpp">std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

Existe-t-il un moyen plus simple d'y parvenir, semblable à l'utilisation de tableaux simples de style C ?

Non, il n'est pas possible d'effectuer cela opération sans utiliser de modèles de fonction ou de conteneurs alternatifs comme std :: vector.

Solution de modèles de fonction

Pour créer une fonction générique capable de gérer std :: tableaux de n'importe quelle taille , vous devez utiliser un modèle de fonction :

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Ce modèle définit une fonction qui prend un tableau d'entiers de n'importe quelle taille et multiplie chaque élément par le multiplicateur donné.

Un exemple réel de cette implémentation peut être trouvée ici : [Exemple en direct](https://godbolt.org/z/Y932XW)

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