Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-24 19:04:30
original
1015 Les gens l'ont consulté

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>
Copier après la connexion

É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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal