Iterando un conjunto de ETS en C ++

Iterando un conjunto de ETS en C ++
El siguiente es un conjunto de nombres de frutas: "Fruta de pasión", "plátano", "sandía", "Blackberry", "Grape"

En C ++, un conjunto como se escribe así, es un conjunto literal o literal. También es el inicializador_list. En C ++, un iterador es una clase. Aunque es una clase, su objeto se comporta como un puntero. Cuando se incrementa, apunta al siguiente elemento. Cuando está disminuido, apunta al elemento anterior. Así como el operador de indirección puede desactivar el puntero, el iterador también puede ser desactivado de la misma manera. Hay diferentes tipos de iteradores para el conjunto en C++. Este artículo explica los diferentes iteradores para el conjunto y cómo usarlos.

Un programa para codificar el conjunto anterior, o cualquier conjunto, debe comenzar con lo siguiente:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;

La primera línea incluye la biblioteca iostream. Esto es necesario para la terminal (consola). La segunda línea incluye la biblioteca de set. Esto es necesario para la programación de configuración. La tercera línea incluye la biblioteca de cadenas. Para usar cadenas, la clase de cadena debe incluirse; De lo contrario, son los consejos de las cuerdas los que se clasificarán y no los literales alfabéticos de cuerda mismos. Estas son todas las sub-bibliotecas de la biblioteca estándar principal, en C++. ETS en el título de este artículo significa estándar. La cuarta línea no es una directiva. Es una declaración. Insiste en que cualquier nombre utilizado en el programa que no esté precedido por el espacio de nombres de los usuarios es del espacio de nombres estándar.

La clase de iterador no tiene que ser incluida. Ya está en la clase establecida.

Nota: Después de que se han insertado valores en el conjunto, se clasifican internamente en orden ascendente con configuraciones predeterminadas.

Iterador

Este objeto de clase Iterator se devuelve las funciones de miembro Begin () o End () de la clase establecida. La función de miembro begin () devuelve un iterador que apunta al primer elemento del conjunto. La función de miembro final () devuelve un iterador que apunta justo después del último elemento del conjunto.

Este iterador funciona con el == o != operador, pero no funciona con los operadores =. Aunque este iterador no es oficialmente constante, el valor al que apunta no puede cambiarse. El siguiente código muestra cómo usar este iterador:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: iterator iter = st.comenzar(); iter != ST.fin(); iter ++)
cout << *iter << ", ";
cout << endl;
regresar 0;

La salida es:

plátano, mora, uva, pasión fruta, sandía,

Para cambiar (modificar) el valor de un conjunto, la función de borrado del conjunto debe usarse para borrar el elemento. Después de eso, se puede insertar un nuevo valor. Después de la inserción, habrá clasificación interna, y el valor puede no encajar exactamente donde estaba el valor anterior. Modificar o cambiar el valor (o elemento) de un conjunto es la discusión, durante otro tiempo, ver más tarde.

reverse_iterator

Este es lo opuesto al iterador anterior. Este objeto de clase reverse_iterator es devuelto mediante las funciones miembros rbegin () o rend () de la clase establecida. La función miembro rbegin () devuelve un iterador que apunta al último elemento del conjunto. La función de miembro rend () devuelve un iterador que apunta justo antes del primer elemento del conjunto.

Este reverso_iterator funciona con el == o != operador, pero no funciona con los operadores =. Aunque este iterador no es oficialmente constante, el valor al que apunta no puede cambiarse. El siguiente código muestra cómo usar este iterador:

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: reverse_iterator iter = st.rbegin (); iter != ST.desgarrar(); iter ++)
cout << *iter << ", ";
cout << endl;

La salida es:

sandía, pasión fruta, uva, mora, plátano,
ordenado en orden invertido.

const_iterator

Este objeto de clase const_iterator es devuelto por las funciones miembros cbegin () o cend () de la clase establecida. La función miembro rbegin () devuelve un const_iterator que apunta al primer elemento del conjunto. La función de miembro rend () devuelve un const_iterator que apunta justo después del último elemento del conjunto.

Este const_iterator funciona con el == o != operador, pero no funciona con los operadores =. Este iterador es oficialmente constante y el valor al que apunta no se puede cambiar. El siguiente código muestra cómo usar este iterador:

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: const_iterator iter = st.cbegin (); iter != ST.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

La salida es:

plátano, mora, uva, pasión fruta, sandía,

const_reverse_iterator

Este es lo opuesto al iterador anterior. Este objeto de clase const_reverse_iterator es devuelto mediante las funciones miembros crbegin () o crend ​​() de la clase establecida. La función miembro crbegin () devuelve un iterador que apunta al último elemento del conjunto. La función miembro de crend ​​() devuelve un iterador que apunta justo antes del primer elemento del conjunto.

Este const_reverse_iterator funciona con el == o != operador, pero no funciona con los operadores =. Este iterador es oficialmente constante, y el valor al que apunta no se puede cambiar. El siguiente código muestra cómo usar este iterador:

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: const_reverse_iterator iter = st.crbegin (); iter != ST.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

La salida es

sandía, pasión fruta, uva, mora, plátano,
ordenado en orden invertido.

const_iterator cbegin () y cend ()

cbegin () devuelve un iterador constante incondicional al primer elemento del conjunto. Cend () devuelve un iterador constante incondicional que es justo después del último elemento del set. El siguiente código muestra cómo usarlo:

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: const_iterator iter = st.cbegin (); iter != ST.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

La salida es:

plátano, mora, uva, pasión fruta, sandía,
const_reverse_iterator crbegin () y crend ​​()

Esto es lo opuesto a lo anterior. El siguiente código muestra cómo usarlo:

colocar st ("pasión fruta", "plátano", "sandía", "mora", "uva");
para (establecer:: const_reverse_iterator iter = st.crbegin (); iter != ST.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

La salida es:

sandía, pasión fruta, uva, mora, plátano,

Conclusión

Todos los iteradores devueltos por las funciones de los miembros del objeto establecido funcionan con el == o != operador, pero no funciona con los operadores =. Todos ellos pueden ser incrementados o disminuidos. Todos los iteradores devueltos por las funciones miembros del conjunto son directa o indirectamente constantes. Esto significa que los valores a los que apuntan no se pueden cambiar usando el iterador.

Para cambiar (modificar) el valor de un conjunto, la función de borrado del conjunto debe usarse para borrar el elemento. Después de eso, se puede insertar un nuevo valor. Después de la inserción, habrá clasificación interna, y el valor puede no encajar exactamente donde estaba el valor anterior. Modificar o cambiar el valor (o elemento) de un conjunto es la discusión durante otro tiempo; ver más tarde.