Cómo cambiar un conjunto a un vector en C ++

Cómo cambiar un conjunto a un vector en C ++
Se puede crear un conjunto en C ++ de la siguiente manera:
colocar p = 'j', 'i', 'h', 'g', 'f';

Después de esto, hay una clasificación interna y los valores del conjunto se organizan de la siguiente manera en función de la configuración predeterminada:

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

Cuando el conjunto se convierte en un vector, este nuevo acuerdo se mantiene hasta que se cambia. Para codificar el conjunto en un programa C ++, se debe incluir la biblioteca establecida. Para codificar el vector en un programa C ++, la biblioteca vectorial debe incluirse.

Hay varias formas de cambiar un conjunto a un vector. Se explican tres formas simples en este artículo. Dos de estos métodos para explicarse en este artículo, tratar con las funciones de los miembros de la clase Vector. El otro método trata con la función de copia de la biblioteca de algoritmo.

Rango desde el set

Se puede obtener una gama de elementos de un conjunto. Este rango no incluiría el último elemento indicado. La gama sale en dos iteradores del mismo tipo para un conjunto. El siguiente programa ilustra esto:

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

colocar st = 'j', 'i', 'h', 'g', 'f';
colocar:: iterator itb = st.comenzar(); set :: iterator ite = st.fin();
itb ++; ite--;
para (establecer:: iterator it = itb; él != ite; IT ++)
cout << *it << ", ";
cout << endl;
regresar 0;

La salida es:

G, H, yo,

Recuerde que los valores en el conjunto se habían reorganizado en orden ascendente en función de la configuración predeterminada después de la inserción. El iterador ITB señala justo antes del primer elemento del conjunto reordenado al principio. El iterador ite señala justo más allá del último elemento del conjunto reordenado al principio. "ITB ++" luego apunta al segundo elemento, mientras que "ite-" luego apunta al último elemento para el rango. Este último elemento no se incluirá en la gama.

El for-loop imprime la gama, ['g', 'h', 'i' [, excluyendo 'j' como debería.

En el caso de convertir todo el conjunto en un vector, todo el rango del conjunto debe usarse. Entonces, ITB o ITE no deberían ser incrementados ni disminuidos.

El constructor de vectores de rango

El constructor vectorial, que toma un rango como argumentos, es:

plantilla
Constexpr vector (InputIterator First, Inputiterator Last, Const Allocator & = Allocator ());

Si no se da el tercer argumento, el valor predeterminado es elegido por C++. Comparando esta sintaxis con el código anterior, primero sería ITB y el último sería ITE.

Por lo tanto, este constructor se puede usar para convertir un conjunto en un vector. El siguiente programa ilustra esto:

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

colocar st = 'j', 'i', 'h', 'g', 'f';
colocar:: iterator itb = st.comenzar(); set :: iterator ite = st.fin();
vector VTR (ITB, ITE);
para (int i = 0; icout << vtr[i] << ", ";
cout << endl;
regresar 0;

La salida es:

F, G, H, I, J,

ordenado. El argumento del asignador se omitió en el código. El operador de soportes cuadrados se utilizó para obtener los valores del vector que eran los valores ordenados del conjunto.

Esta ha sido una forma de convertir o cambiar un conjunto en un vector. Las otras dos formas se explican a continuación:

Vector Asignar la función miembro

Una de las sintaxis para la función de miembro de asignación vectorial () es:

plantilla
Consexpr void asigne (InputIterator primero, Inputiterator Last)

Toma un rango como argumentos, primero y la duración del mismo set iterator. En esta situación, el vector vacío debe construirse primero. Después de eso, el método de asignación agregará todos los elementos del conjunto al vector. El contenido establecido permanece sin cambios pero aún así ordenado. El siguiente programa ilustra el uso de la función de asignación del miembro:

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

colocar st = 'j', 'i', 'h', 'g', 'f';
colocar:: iterator itb = st.comenzar(); colocar:: iterator ite = st.fin();
vector VTR;
VTR.asignar (itb, ite);
para (establecer:: iterator it = itb; él != ite; it ++) cout << *it << ", "; cout << endl;
para (int i = 0; iregresar 0;

La salida es:

F, G, H, I, J,
F, G, H, I, J,

El primer for-loop es mostrar el contenido establecido que no cambia. El segundo es mostrar el vector cuyo contenido al principio es el del conjunto ordenado.

Este ha sido el segundo método para convertir o cambiar un conjunto a un vector. La explicación del tercer método para este artículo sigue:

Una función de copia () en la biblioteca del algoritmo

La sintaxis de una de las funciones de copia en la biblioteca de algoritmo es:

plantilla
Constexpr OutterIterator Copy (InputIterator First, Inputiterator Last, resultado de la salida)

En el caso de Vector, el iterador de retorno es tanto un iterador de entrada como un iterador de salida al mismo tiempo. Si P es un iterador de entrada, entonces *P devolvería el valor apuntado por P. Si P es un iterador de salida, entonces *P puede recibir un valor para la ubicación de memoria apuntada por P.

Los argumentos primero y segundo aquí son los mismos que para la función anterior. El resultado del argumento es un Outputiterator que apunta al primer elemento del vector.

El retorno de salida aquí, puntos justo después del último elemento del vector. Esto significa que el vector debe crearse con un tamaño que sea al menos igual al tamaño del conjunto.

Con esta función copy (), la biblioteca de algoritmo debe incluirse en el programa porque la función está en la biblioteca de algoritmo. El siguiente código en la función C ++ Main () muestra cómo usar la función de copia:

colocar st = 'j', 'i', 'h', 'g', 'f';
colocar:: iterator itb = st.comenzar(); set :: iterator ite = st.fin();
vector VTR (10);
vector:: iterator outiT = copy (itb, ite, VTR.comenzar());
VTR.cambiar el tamaño (out - vtr.comenzar());
para (establecer:: iterator it = itb; él != ite; it ++) cout << *it << ", "; cout << endl;
para (int i = 0; iregresar 0;

La salida es:

F, G, H, I, J,
F, G, H, I, J,

El outputiterator devuelto es del vector. El vector tuvo que cambiar el tamaño del número de elementos que están en el conjunto. El contenido del conjunto no cambió.

Conclusión

Un conjunto se puede cambiar en un vector utilizando el constructor de vectores de rango o la función de miembro de vector asignar () o la función de copia de la biblioteca de algoritmo (). Hay otros métodos menos fáciles de codificar; ver más tarde.