Maison > développement back-end > C++ > Comment initialiser un `std::array` constructible autre que par défaut sans répétition en C ?

Comment initialiser un `std::array` constructible autre que par défaut sans répétition en C ?

Linda Hamilton
Libérer: 2024-10-30 03:31:02
original
698 Les gens l'ont consulté

How to Initialize a Non-Default Constructible `std::array` Without Repetition in C  ?

Initialisation d'un std::array constructible non par défaut sans répétition

En C, initialisation d'un std::array d'éléments constructibles non par défaut peut être un défi. Les méthodes d'initialisation standard deviennent fastidieuses lorsque n, la taille du tableau, est grand ou est un paramètre de modèle.

Solution :

Une solution élégante exploite une combinaison d'itérateurs et de modèles. Voici comment cela fonctionne :

Nous définissons deux utilitaires d'assistance :

  • genseq_t génère une séquence d'entiers [0, 1, ..., n-1 ].
  • repeat crée un tableau en répétant une valeur donnée le nombre de fois spécifié.

En utilisant ces utilitaires, nous pouvons initialiser le std::array dans la fonction de modèle f comme suit :

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>
Copier après la connexion

Détails de mise en œuvre :

  • genseq_t : Il utilise des modèles variadiques pour créer un séquence d'entiers jusqu'à n.
  • repeat: Cette fonction décompresse la séquence générée par genseq_t et construit le tableau en appelant T(N, valeur) pour chaque entier de la séquence.

Exemple :

Considérons une initialisation avec une valeur comme entier et n comme paramètre de modèle :

<code class="cpp">void f(int value)
{
    std::array<T, 5> items = repeat(value, genseq_t<5>{});
}</code>
Copier après la connexion

Ici, les éléments seront initialisé avec la valeur répétée cinq fois : {value, value, value, value, value}.

Avantages :

Cette approche est plus concise, surtout lorsque n est grand. Cela élimine également le besoin de répéter manuellement la valeur.

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.cn
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