Comment changer un ensemble en vecteur en C ++

Comment changer un ensemble en vecteur en C ++
Un ensemble peut être créé en C ++ comme suit:
ensemble p = 'j', 'i', 'h', 'g', 'f';

Après cela, il y a un tri interne et les valeurs de l'ensemble sont organisées comme suit en fonction des paramètres par défaut:

«F», «G», «H», «I», «J»

Lorsque l'ensemble est converti en vecteur, cette nouvelle disposition est maintenue jusqu'à ce qu'elle soit modifiée. Pour coder l'ensemble dans un programme C ++, la bibliothèque set doit être incluse. Pour coder le vecteur dans un programme C ++, la bibliothèque vectorielle doit être incluse.

Il existe plusieurs façons de changer un ensemble en vecteur. Trois façons simples sont expliquées dans cet article. Deux de ces méthodes à expliquer dans cet article, traitent des fonctions membres de la classe vectorielle. L'autre méthode traite de la fonction de copie de la bibliothèque d'algorithme.

Varie de l'ensemble

Une gamme d'éléments peut être obtenue à partir d'un ensemble. Cette gamme n'inclurait pas le dernier élément indiqué. La gamme sort en deux itérateurs du même type pour un ensemble. Le programme suivant illustre ceci:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemble st = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator itb = st.commencer(); set :: iterator ite = st.fin();
itb ++; ite--;
pour (ensemble:: iterator it = itb; il != ite; it ++)
couter << *it << ", ";
couter << endl;
retour 0;

La sortie est:

G, h, je,

N'oubliez pas que les valeurs de l'ensemble avaient été réorganisées dans l'ordre croissant en fonction des paramètres par défaut après insertion. L'ITERATOR ITB pointe juste avant le premier élément de l'ensemble réorganisé au début. L'itérateur ITE pointe juste au-delà du dernier élément de l'ensemble réorganisé au début. "ITB ++" pointe ensuite vers le deuxième élément, tandis que "ite-" pointe ensuite vers le dernier élément de la plage. Ce dernier élément ne sera pas inclus dans la gamme.

Le For-Loop imprime la gamme, [«G», «H», «I» [, à l'exclusion de «J» comme il doit.

Dans le cas de la conversion de l'ensemble entier en vecteur, toute la gamme de l'ensemble doit être utilisée. Ainsi, ITB ou ITE ne doit être ni incrémenté ni décrémenté.

Le constructeur vectoriel de la gamme

Le constructeur vectoriel, qui prend une gamme comme arguments, est:

modèle
Consxpr Vector (Inputiterator First, InputIterator Last, const Allocator & = allocator ());

Si le troisième argument n'est pas donné, la valeur par défaut est choisie par C++. En comparant cette syntaxe avec le code ci-dessus, il serait d'abord ITB et le dernier serait ite.

Ce constructeur peut donc être utilisé pour convertir un ensemble en vecteur. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemble st = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator itb = st.commencer(); set :: iterator ite = st.fin();
vecteur vtr (itb, ite);
pour (int i = 0; icouter << vtr[i] << ", ";
couter << endl;
retour 0;

La sortie est:

F, g, h, i, j,

trié. L'argument d'allocateur a été omis dans le code. L'opérateur de crochets a été utilisé pour obtenir les valeurs du vecteur qui étaient les valeurs triées de l'ensemble.

Cela a été un moyen de convertir ou de changer un ensemble en vecteur. Les deux autres façons sont expliquées ensuite:

Fonction de membre de l'attribution vectorielle

L'une des syntaxes de la fonction membre Vector Assign () est:

modèle
constexpr void Assign (InputIterator d'abord, inputIterator en dernier)

Il faut une plage comme arguments, premier et dure le même ensemble Iterator. Dans cette situation, le vecteur vide doit être construit en premier. Après cela, la méthode Assign ajoutera tous les éléments de l'ensemble au vecteur. Le contenu défini reste inchangé mais toujours trié. Le programme suivant illustre l'utilisation de la fonction de membre de l'attribution:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemble st = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator itb = st.commencer(); ensemble:: iterator ite = st.fin();
vecteur Vtr;
vtr.attribuer (itb, ite);
pour (ensemble:: iterator it = itb; il != ite; it ++) cout << *it << ", "; cout << endl;
pour (int i = 0; iretour 0;

La sortie est:

F, g, h, i, j,
F, g, h, i, j,

La première boucle pour afficher le contenu défini qui est inchangé. La seconde consiste à afficher le vecteur dont le contenu au début est celui de l'ensemble trié.

Ce fut la deuxième méthode pour convertir ou changer un ensemble en un vecteur. L'explication de la troisième méthode pour cet article suit:

Une fonction Copy () dans la bibliothèque de l'algorithme

La syntaxe de l'une des fonctions de copie de la bibliothèque d'algorithmes est:

modèle
Copie de sortie de l'OutpowerTiterator de Consxpr (Inputiterator First, Inputiterator Last, Outprowayiterator Result)

Dans le cas de Vector, l'itérateur de retour est à la fois un itérateur d'entrée et un itérateur de sortie en même temps. Si p est un itérateur d'entrée, alors * p renvoyer la valeur pointée par P. Si P est un itérateur de sortie, alors * P peut recevoir une valeur pour l'emplacement de la mémoire pointé par P.

Les premier et deuxième arguments ici sont les mêmes que pour la fonction précédente. Le résultat de l'argument est un OutputIntiterator qui pointe vers le premier élément du vecteur.

Le retour de sortie de sortie ici, pointe juste après le dernier élément du vecteur. Cela signifie que le vecteur doit être créé avec une taille au moins égale à la taille de l'ensemble.

Avec cette fonction Copy (), la bibliothèque d'algorithmes doit être incluse dans le programme car la fonction est dans la bibliothèque d'algorithme. Le code suivant dans la fonction c ++ main () montre comment utiliser la fonction de copie:

ensemble st = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator itb = st.commencer(); set :: iterator ite = st.fin();
vecteur vtr (10);
vecteur:: iterator outit = copy (itb, ite, vtr.commencer());
vtr.redimensionner (outit - vtr.commencer());
pour (ensemble:: iterator it = itb; il != ite; it ++) cout << *it << ", "; cout << endl;
pour (int i = 0; iretour 0;

La sortie est:

F, g, h, i, j,
F, g, h, i, j,

Le sortie de sortie est renvoyé du vecteur. Le vecteur devait être redimensionné au nombre d'éléments qui se trouvent dans l'ensemble. Le contenu de l'ensemble n'a pas changé.

Conclusion

Un ensemble peut être transformé en un vecteur à l'aide du constructeur de vecteur de plage ou de la fonction membre Vector Assign () ou de la fonction de bibliothèque d'algorithme Copy (). Il existe d'autres méthodes moins faciles à coder - voir plus tard.