Maison > développement back-end > C++ > Les conteneurs C peuvent-ils stocker des données de différents types ?

Les conteneurs C peuvent-ils stocker des données de différents types ?

Mary-Kate Olsen
Libérer: 2024-11-05 06:34:01
original
993 Les gens l'ont consulté

Can C   Containers Store Data of Different Types?

Conteneurs hétérogènes en C

Dans la classification des conteneurs STL, certaines exigences restent non satisfaites, à savoir de taille variable et hétérogènes (données de types différents) . Il est raisonnable de se demander si C fournit des solutions pour ce cas d'utilisation.

En règle générale, les conteneurs C sont conçus pour contenir des objets d'un seul type, mais vous pouvez utiliser des pointeurs ou boost::any pour s'adapter à différents types :

Utilisation de pointeurs :

Vous pouvez stocker un conteneur de pointeurs vers le type de base, vous permettant de contenir des objets dérivés de ce type :

<code class="cpp">std::vector<MyBaseType*>;</code>
Copier après la connexion

Utiliser boost::any:

Boost fournit boost::any, qui vous permet de stocker des objets de tout type en toute sécurité :

<code class="cpp">using boost::any_cast;
typedef std::list<boost::any> many;</code>
Copier après la connexion

Vous pouvez ensuite utiliser any_cast pour convertir les objets dans les types souhaités.

Utilisation boost::variant:

Boost::variant est une autre option qui vous permet de spécifier un ensemble de types autorisés :

<code class="cpp">std::vector<boost::variant<unsigned, std::string>>;</code>
Copier après la connexion

Cependant, il est important de noter que boost : :any et boost::variant ont des performances et une surcharge de mémoire par rapport aux conteneurs STL standard.

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