Création d'un vecteur qui contient deux types de données différents ou des classes
Je suis en train de créer un vecteur qui contient un entier et une chaîne de caractères. Est-ce possible?
Par exemple je veux vector<int>myArr
de tenir string x= "Picture This"
boost.org/doc/libs/1_54_0/doc/html/variant.html
double possible de la création d'un tableau qui peut contenir des objets de différentes classes en C++
Attendez, vous voulez tenir les deux d'entre eux, soit d'un entier ou une chaîne de caractères dans chaque élément?
Pourquoi voulez-vous un vecteur qui contient un entier et une chaîne de caractères?
double possible de la création d'un tableau qui peut contenir des objets de différentes classes en C++
Attendez, vous voulez tenir les deux d'entre eux, soit d'un entier ou une chaîne de caractères dans chaque élément?
Pourquoi voulez-vous un vecteur qui contient un entier et une chaîne de caractères?
OriginalL'auteur Person | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un syndicat, mais il existe de meilleures alternatives.
Vous pouvez utiliser
boost::variant
pour obtenir ce type de fonctionnalité:Pour obtenir une chaîne de caractères ou un int d'une variante, vous pouvez utiliser
boost::get
:Modifier
Eh bien, c'est 2017 maintenant. Vous n'avez plus besoin de coup de pouce pour avoir
variant
, maintenant que nous avonsstd::variant
!vector
deunion
type avec une taille fixe de la chaîne (const char[]
) et un entier sans avoir à utiliser boost. Vous pouvez également utiliserstd::string
mais vous avez besoin de placer leunion
dans unstruct
avec un type de balise pour le destructeur de choisir le bon type pour les détruire. Voir la fin du lien dans ma réponse.Désolé, aucun besoin de la
const
pour lachar[]
.Il y a quelques bonnes raisons de pas utiliser Boost.
Je ne cautionne pas cowboy_casts
std::variante est disponible dans la STL à partir de C++17
OriginalL'auteur Mohamad Ali Baydoun
Oui, il est possible de tenir deux types différents, vous pouvez créer un
vector
deunion
types. L'espace utilisé sera le plus grand des types. Types d'Union sont expliquées ici ainsi que la façon dont vous pouvez identifier le type. Un petit exemple:Vous pouvez également utiliser
std::string
mais vous avez besoin de placer leunion
dans unstruct
avec un type de balise pour le destructeur de choisir le bon type pour les détruire. Voir la fin du lien.OriginalL'auteur devil
Si vous voulez que le vecteur de la tenue de deux types différents, vous pouvez utiliser un
std::pair
(oustd::tuple
si plus de deux)En C++03:
Si vous voulez le vecteur de tenir un type qui peut être utilisé de deux types différents: Non, il ne peut pas être fait.
OriginalL'auteur Casey
Non, un
vector
doit contenir uniquement des variables de type déclaré dans les équerres<
>
.Vous pouvez créer une classe qui a un
int
membre et unstring
membre, et ensuite de créer unvector
de tenir les instances de cette classe, et puis de référence de laint
oustring
membres lorsque vous en avez besoin.Eh bien, cela dépendra de la demande.
En effet. Mais les conseils pour les apprenants ne doivent jamais mention des pointeurs dans des conteneurs. Il est donc rarement nécessaire, et ainsi de facilement mettre en désordre, qu'il est servi par expliquer la possibilité jusqu'à ce que le problème réel à portée de main l'exige. Et puis tu serais encore suggérer des pointeurs intelligents.
Bon point, j'ai supprimé la référence à des pointeurs.
OriginalL'auteur Cory Klein
Pas.
myArr
est instancié pour tenirint
type. Il peut stocker qu'int
type.OriginalL'auteur Mahesh