Définir l'intersection en C ++

Définir l'intersection en C ++
Voici les ensembles à deux caractères:
p = 'h', 'g', 'f', 'e', ​​'d'
Q = 'J', 'I', 'H', 'G', 'F'

En C ++, l'intersection de ces deux ensembles serait:

r = 'f', 'g', 'h'

organisé en ordre ascendant en fonction des paramètres par défaut. L'intersection d'autres types d'ensembles est possible, telles que l'intersection des ensembles d'entiers, l'intersection des ensembles de flotteurs, l'intersection des ensembles de doubles, etc.

La classe SET dans la bibliothèque SET C ++, qui doit être incluse dans le programme pour Set Work, n'a pas de fonction membre pour l'intersection. Ainsi, afin d'obtenir l'intersection des ensembles, la bibliothèque d'algorithmes, qui a la fonction set_intresection (), doit être incluse dans le programme.

La bibliothèque de l'algorithme C ++ dispose d'un certain nombre de fonctions surchargées set_introadation. Seuls les deux les plus simples sont expliqués dans cet article. Cependant, avant le début des explications, le lecteur doit connaître la différence entre l'itérateur de sortie, l'itérateur d'entrée et l'itérateur de transfert.

Outporediterator et ForwardIterator

Un itérateur est un pointeur de classe. Un outputIterator est un itérateur à lequel une valeur peut être attribuée à l'expression déréférencée. Par exemple, si l'itérateur est I pour les entiers, alors;

* i = 5;

ferais que je montre l'emplacement de la mémoire qui a la valeur, 5.

Un INPUTITERATOR est un itérateur dont l'expression déréférencée renvoie la valeur que l'itérateur pointe vers. Par exemple, si l'itérateur est i pour les entiers et pointe vers l'emplacement de la mémoire qui a le numéro 7, alors;

int num = * i;

ferait que num tiendrait la valeur, 5.

Un avant-gardiste est une forme élaborée de l'itérateur d'entrée.

Gammes

Lorsque les valeurs destinées à un ensemble ont été insérées dans l'ensemble, les valeurs sont triées dans l'ordre croissant en fonction des paramètres par défaut. Avec des ensembles, deux itérateurs avant peuvent être utilisés pour identifier une gamme d'éléments dans l'ensemble. Cet article concerne toute la gamme de l'ensemble. Le programme suivant montre comment obtenir les itérateurs avant qui représentent toute la gamme d'un ensemble:

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

ensemble p = 'h', 'g', 'f', 'e', ​​'d';
ensemble:: iterator d'abord = p.commencer();
ensemble:: iterator dure = p.fin();
retour 0;

Remarque l'utilisation des fonctions membre début () et end () de la classe SET.

Aux fins de l'intersection de deux ensembles complets, il y aura First1 et Last1 pour le premier ensemble; et First2 et Last2 pour le deuxième set; Pour les deux gammes complètes.

Itérateur de sortie

Les deux fonctions SET_INTERSECTION considérées dans cet article renvoient un itérateur de sortie. Malheureusement, la classe définie n'a pas d'itérateur de sortie. Eh bien, la classe vectorielle a. Cela signifie que l'itérateur de sortie de la classe vectorielle qui est simplement appelé iterator, peut être utilisé pour recevoir l'itérateur de sortie renvoyé par la fonction set_INTERSECTION (). Une autre bonne nouvelle est que cet itérateur vectoriel peut servir à la fois en itérateur de sortie et en itérateur d'entrée. N'oubliez pas d'inclure le vecteur afin de l'utiliser dans le programme.

Les deux fonctions surchargées Set_Intor-section mentionnées ci-dessus peuvent désormais être discutées.

Fonction de base set_intrection

La syntaxe de cette fonction dans la bibliothèque d'algorithmes est:

modèle
constexpr OutputIterator
set_INTERSECTION (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, inputIterator2 Last2, Outprowingiterator Result)

Outporediterator est l'itérateur de sortie de retour, obtenu à partir de la classe vectorielle. Il pointerait juste après le dernier élément pratique du vecteur. Cela signifie que la taille du vecteur vide pour recevoir l'intersection des ensembles doit être estimée au-dessus de celle du nombre de valeurs dans l'intersection. Le dernier résultat de l'argument est le pointeur de l'itérateur de sortie pointant vers le début du vecteur, qui recevra l'intersection des ensembles.

Avec le vecteur, l'itérateur de sortie renvoyé, qui se trouve également être un itérateur d'entrée, peut être utilisé pour afficher les valeurs de l'intersection des ensembles à l'aide de la boucle pour. Avec l'introduction précédente pour cet article, le reste des paramètres de la fonction devient explicite. Le programme suivant montre comment utiliser cette fonction:

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

ensemble p = 'h', 'g', 'f', 'e', ​​'d';
ensemble:: iterator premier = p.commencer(); set :: iterator last1 = p.fin();
ensemble q = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator premier = q.commencer(); set :: iterator last2 = q.fin();
vecteur vtr (10);
vecteur:: iterator outit = set_intresection (first1, last1, first2, last2, vtr.commencer());
vtr.redimensionner (outit - vtr.commencer());
pour (outit = vtr.commencer(); En dehors != VTR.fin(); OUTIT ++)
couter << *outIt << ", ";
couter << endl;
retour 0;

Notez que le vecteur devait être redimensionné pour ne contenir que les éléments de l'intersection après que la fonction set_intrection () avait été appelée. La sortie est:

F, G, H,

Fonction de base set_inthersection avec comparaison personnalisée

La syntaxe de cette fonction dans la bibliothèque d'algorithmes est:

modèle
constexpr OutputIterator
set_INTERSECTION (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 first2, inputIterator2 Last2,
Résultat de sortie de sortie, comparer compare);

Outporediterator est l'itérateur de sortie de retour obtenu à partir de la classe vectorielle. Il pointerait juste après le dernier élément pratique du vecteur. Cela signifie que la taille du vecteur vide pour recevoir l'intersection des ensembles doit être estimée au-dessus de celle du nombre de valeurs dans l'intersection. Le résultat de l'argument du dernier mais un est le pointeur de l'itérateur de sortie pointant vers le début du vecteur, qui recevra l'intersection des ensembles.

Avec le vecteur, l'itérateur de sortie est renvoyé, qui est également un itérateur d'entrée, peut être utilisé pour afficher les valeurs de l'intersection des ensembles à l'aide de la boucle pour.

Comp, est une fonction définie par le programmeur. Ça peut être:

bool comp (char a, char b)
si un != b)
Retour Vrai;
autre
retourne false;

Cette fonction comp () renvoie vrai ou faux. D'après l'introduction de cet article ci-dessus, le reste des paramètres de la fonction set_inthersection, sont explicites.

Avec l'en-tête du programme ci-dessus, la fonction Main () suivante utilisera la fonction comp () ci-dessus.

int main()

ensemble p = 'h', 'g', 'f', 'e', ​​'d';
ensemble:: iterator premier = p.commencer(); ensemble:: Iterator Last1 = P.fin();
ensemble q = 'j', 'i', 'h', 'g', 'f';
ensemble:: iterator premier = q.commencer(); ensemble:: iterator last2 = q.fin();
vecteur vtr (10);
vecteur:: iterator outit = set_intresection (first1, last1, first2, last2, vtr.begin (), comp);
vtr.redimensionner (outit - vtr.commencer());
pour (outit = vtr.commencer(); En dehors != VTR.fin(); OUTIT ++)
couter << *outIt << ", ";
couter << endl;
retour 0;

La sortie est:

F, G, H,

pareil qu'avant.

Conclusion

La classe SET dans la bibliothèque SET C ++, qui doit être incluse dans le programme pour Set Work, n'a pas de fonction membre pour l'intersection. Ainsi, afin d'obtenir l'intersection des ensembles, la bibliothèque d'algorithmes, qui a la fonction set_intresection (), doit être incluse dans le programme.

La bibliothèque de l'algorithme C ++ dispose d'un certain nombre de fonctions surchargées set_introadation. En janvier 2022, deux de ces fonctions qui ont probablement été mises en œuvre par votre compilateur ont été expliquées ci-dessus. Les compilateurs doivent toujours implémenter le reste des fonctions Set_Intor () surchargées trouvées dans la spécification C ++.