Itération d'un ensemble de MST en C ++

Itération d'un ensemble de MST en C ++
Ce qui suit est un ensemble de noms de fruits: "Fruit de la passion", "banane", "pastèque", "mûre", "raisin"

En C ++, un ensemble tel que tapé comme celui-ci, est un ensemble littéral ou un littéral. C'est aussi l'initizaliser_list. En C ++, un itérateur est une classe. Bien qu'il s'agisse d'une classe, son objet se comporte comme un pointeur. Lorsqu'il est incrémenté, il pointe vers l'élément suivant. Lorsqu'il est décrémenté, il pointe vers l'élément précédent. Tout comme le pointeur peut être déréféré par l'opérateur d'indirection, l'itérateur peut également être déréféré de la même manière. Il existe différents types d'itérateurs pour l'ensemble en C++. Cet article explique les différents itérateurs de l'ensemble et comment les utiliser.

Un programme pour coder l'ensemble ci-dessus, ou tout ensemble, devrait commencer par ce qui suit:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

La première ligne comprend la bibliothèque iOStream. Ceci est nécessaire pour le terminal (console). La deuxième ligne comprend la bibliothèque définie. Ceci est nécessaire pour la programmation définie. La troisième ligne comprend la bibliothèque de chaînes. Pour utiliser les chaînes, la classe String doit être incluse; Sinon, ce sont les pointeurs des chaînes qui seront triées et non les littéraux alphabétiques à cordes eux-mêmes. Ce sont tous des sous-bibliothèques de la bibliothèque standard principale, en C++. STD dans le titre de cet article signifie standard. La quatrième ligne n'est pas une directive. C'est une déclaration. Il insiste sur le fait que tout nom utilisé dans le programme qui n'est pas précédé de l'espace de noms d'utilisateur provient de l'espace de noms standard.

La classe Iterator n'a pas à être incluse. Il est déjà dans la classe définie.

Remarque: Une fois les valeurs ont été insérées dans l'ensemble, elles sont triées en interne dans l'ordre croissant avec des paramètres par défaut.

Itérateur

Cet objet de classe Iterator est renvoyé par les fonctions membre début () ou end () de la classe SET. La fonction de membre begin () renvoie un itérateur qui pointe vers le premier élément de l'ensemble. La fonction de membre End () renvoie un itérateur qui pointe juste après le dernier élément de l'ensemble.

Cet itérateur fonctionne avec le == ou != opérateur, mais ne fonctionne pas avec les opérateurs =. Bien que cet itérateur ne soit pas officiellement constant, la valeur à laquelle il pointe peut ne pas être modifiée. Le code suivant montre comment utiliser cet itérateur:

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

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: iterator iter = st.commencer(); iter != st.fin(); iter ++)
couter << *iter << ", ";
couter << endl;
retour 0;

La sortie est:

banane, mûre, raisin, fruit de la passion, pastèque,

Afin de modifier (modifier) ​​la valeur d'un ensemble, la fonction d'effacement de l'ensemble doit être utilisée pour effacer l'élément. Après cela, une nouvelle valeur peut être insérée. Après l'insertion, il y aura un tri interne, et la valeur peut ne pas s'adapter exactement à l'ancienne valeur. La modification ou la modification de la valeur (ou de l'élément) d'un ensemble, c'est la discussion, pour une autre fois - voir plus tard.

inverse_iterator

C'est l'opposé de l'Itérateur ci-dessus. Cet objet de classe Reverse_iterator est renvoyé par les fonctions membre RBEGIN () ou Rend () de la classe SET. La fonction membre RBEGIN () renvoie un itérateur qui pointe vers le dernier élément de l'ensemble. La fonction membre Rend () renvoie un itérateur qui pointe juste avant le premier élément de l'ensemble.

Ce revers_iterator fonctionne avec le == ou != opérateur, mais ne fonctionne pas avec les opérateurs =. Bien que cet itérateur ne soit pas officiellement constant, la valeur à laquelle il pointe peut ne pas être modifiée. Le code suivant montre comment utiliser cet itérateur:

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: reverse_iterator iter = st.rbegin (); iter != st.déchirer(); iter ++)
couter << *iter << ", ";
couter << endl;

La sortie est:

pastèque, fruits de passion, raisin, mûre, banane,
trié dans l'ordre inversé.

const_iterator

Cet objet de classe const_iterator est renvoyé par les fonctions membre CBegin () ou Cend () de la classe SET. La fonction membre RBEGIN () renvoie une const_iterator qui pointe vers le premier élément de l'ensemble. La fonction membre Rend () renvoie une const_iterator qui pointe juste après le dernier élément de l'ensemble.

Ce const_iterator fonctionne avec le == ou != opérateur, mais ne fonctionne pas avec les opérateurs =. Cet itérateur est officiellement constant et la valeur à laquelle il pointe ne peut pas être modifiée. Le code suivant montre comment utiliser cet itérateur:

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: const_iterator iter = st.cbegin (); iter != st.cend (); iter ++)
couter << *iter << ", ";
couter << endl;

La sortie est:

banane, mûre, raisin, fruit de la passion, pastèque,

const_reverse_iterator

C'est l'opposé de l'Itérateur ci-dessus. Cet objet de classe const_reverse_iterator est renvoyé par les fonctions membre CRBegin () ou Crend () de la classe SET. La fonction membre CRBegin () renvoie un itérateur qui pointe vers le dernier élément de l'ensemble. La fonction membre Crend () renvoie un itérateur qui pointe juste avant le premier élément de l'ensemble.

Ce const_reverse_iterator fonctionne avec le == ou != opérateur, mais ne fonctionne pas avec les opérateurs =. Cet itérateur est officiellement constant, et la valeur à laquelle il pointe ne peut pas être modifiée. Le code suivant montre comment utiliser cet itérateur:

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: const_reverse_iterator iter = st.crbegin (); iter != st.crend ​​(); iter ++)
couter << *iter << ", ";
couter << endl;

La sortie est

pastèque, fruits de passion, raisin, mûre, banane,
trié dans l'ordre inversé.

const_iterator cbegin () et cend ()

cbegin () renvoie un itérateur constant inconditionnel au premier élément de l'ensemble. cend () renvoie un itérateur constant inconditionnel qui est juste après le dernier élément de l'ensemble. Le code suivant montre comment l'utiliser:

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: const_iterator iter = st.cbegin (); iter != st.cend (); iter ++)
couter << *iter << ", ";
couter << endl;

La sortie est:

banane, mûre, raisin, fruit de la passion, pastèque,
const_reverse_iterator crbegin () et crend ​​()

C'est l'opposé de ce qui précède. Le code suivant montre comment l'utiliser:

ensemble st ("passion fruit", "banane", "pastèque", "mûre", "raisin");
pour (ensemble:: const_reverse_iterator iter = st.crbegin (); iter != st.crend ​​(); iter ++)
couter << *iter << ", ";
couter << endl;

La sortie est:

pastèque, fruits de passion, raisin, mûre, banane,

Conclusion

Tous les itérateurs renvoyés par les fonctions membres de l'objet SET fonctionnent avec le == ou != opérateur, mais ne travaillez pas avec les opérateurs =. Tous peuvent être incrémentés ou décrémentés. Tous les itérateurs renvoyés par les fonctions membres de l'ensemble sont directement ou indirectement constants. Cela signifie que les valeurs auxquelles ils pointent ne peuvent pas être modifiées à l'aide de l'itérateur.

Afin de modifier (modifier) ​​la valeur d'un ensemble, la fonction d'effacement de l'ensemble doit être utilisée pour effacer l'élément. Après cela, une nouvelle valeur peut être insérée. Après l'insertion, il y aura un tri interne, et la valeur peut ne pas s'adapter exactement à l'ancienne valeur. Modifier ou modifier la valeur (ou l'élément) d'un ensemble est une discussion pour une autre fois - voir plus tard.