Si vtra se convierte en 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' y
VTRB se convierte en 'a', 'b', 'c', 'd', 'e'
Entonces ambos vectores se han cambiado. El hecho de que los vectores sean de diferentes longitudes realmente no plantea un problema. Para que se intercambien dos vectores, deben ser del mismo tipo.
La clase Vector tiene una función miembro para intercambiar a sí misma y a otro vector. La biblioteca de algoritmo tiene otras funciones de intercambio con diferentes nombres y para fines modificados. La principal diferencia entre la función Swap () de Vector Miembro y las funciones de intercambio de algoritmo es que, mientras que la función miembro cambia su vector con otro vector, las funciones de intercambio de la biblioteca de algoritmo, cada uno de los vectores independientes.
La función de miembro del vector, swap (), se discutirá en este artículo, y las funciones de intercambio de la biblioteca de algoritmo también se discutirán. Todo el código vectorial se realiza en la función main () para este artículo a menos que se indique lo contrario.
Contenido del artículo
Función Swap () de Vector Miembro
Swap nulo (vector &)
En el siguiente programa, se declaran dos vectores y se cambian su contenido total:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
vectorvtra = 'a', 'b', 'c', 'd', 'e';
vectorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.intercambio (VTRB);
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
regresar 0;
La salida es:
F g h i j k l m
A B C D E
El contenido total de ambos vectores se ha cambiado. La biblioteca de vector debe incluirse para usar un vector en C ++, con la directiva: #include .
En el programa y en la función Main (), el primer segmento declara los dos vectores. El siguiente segmento de código de una línea que es,
vtra.intercambio (VTRB);
intercambia ambos vectores. Está claro que Swap (VTRB) es una función miembro del vector, VTRA. Los dos segmentos de código que vienen después de mostrar el contenido intercambiado.
Iterando con iteradores en lugar de índices
Se puede iterarse con iteradores en lugar del índice. El siguiente programa muestra cómo se puede hacer esto para el contenido vectorial intercambiado:
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
vectorvtra = 'a', 'b', 'c', 'd', 'e';
vectorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.intercambio (VTRB);
para (vector:: iterador p = vtra.comenzar(); pag != Vtra.fin(); p ++)
cout << *p << ";
cout << endl;
para (vector:: iterator q = vtrb.comenzar(); Q != VTRB.fin(); Q ++)
cout << *q << ";
cout << endl;
regresar 0;
La salida es:
F g h i j k l m
A B C D E
Tenga en cuenta la forma en que se inicializa el iterador principal en cada bucle for-bucle. Tenga en cuenta la condición de while en cada bucle. El iterador principal en cada bucle for-bucle se incrementa al igual que el índice.
Intercambio intercambiando iteradores
La biblioteca de algoritmo tiene una función de intercambio llamada iter_swap (). Esta función cambia a los dos principales iteradores de dos vectores independientes. La sintaxis es:
void iter_swap (enenTerator1 A, OndineIterator2 b)
El siguiente programa muestra cómo se puede aplicar esta función de algoritmo-iter_swap ():
#Include>
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
vectorvtra = 'a', 'b', 'c', 'd', 'e';
vectorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vector:: iterator u = vtra.comenzar();
vector:: iterator v = vtrb.comenzar();
intercambio (u, v);
para (u = u; u != VTRB.fin(); u ++)
cout << *u << ";
cout << endl;
para (V = V; V != Vtra.fin(); v ++)
cout << *v << ";
cout << endl;
regresar 0;
La salida es:
F g h i j k l m
A B C D E
Tenga en cuenta que la biblioteca de algoritmo tenía que ser incluida. El segmento de código destacado para este programa es:
vector:: iterator u = vtra.comenzar();
vector:: iterator v = vtrb.comenzar();
intercambio (u, v);
Para la primera de estas declaraciones, U señala 'A' del vector, VTRA. Para la segunda declaración, V señala 'F' del vector, VTRB. La tercera declaración cambia el apuntado. Con él, ahora apunta a 'F' de VTRB y V señala 'A' de VTRA. Ahora se puede usar para iterar a través de los elementos de VTRB, y V ahora se puede usar para iterar a través de los elementos de VTRA.
Rango
Para el vector,
'F', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
la secuencia,
'H', 'i', 'j', 'k'
es un rango.
Las iteraciones para este rango se pueden obtener de la siguiente manera:
vectorvtr = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vector:: iterator itb = vtr.comenzar();
itb ++; itb ++;
vector:: iterator ite = vtr.fin();
ite--; ite--; ite--;
cout << *itB << " << *itE << endl;
La salida es:
H K
La expresión, VTR.begin (), devuelve un iterador que apunta a 'f'. La expresión, VTR.end (), devuelve un iterador que apunta justo después del último elemento del vector. El iterador tiene que ser incrementado dos veces para hacer que el iterador que apunte a 'F' señale 'H'. Para hacer que el iterador sea que apunte, justo más allá del vector, para señalar 'k', ese iterador debe disminuir tres veces y no dos veces. Cuando se disminuye la primera vez, apunta al último elemento, 'M'. Cuando disminuye la segunda vez, apunta al elemento antes, 'l'. Y cuando disminuye la tercera vez, apunta al elemento, 'K'. *ITB Devuelve el valor del elemento que ITB estaba apuntando por última vez. *ITE devuelve el valor del elemento que ITE estaba apuntando por última vez.
Entonces el rango, por los iteradores, es:
[itb, ite)
')' Al final de la notación de rango significa que, si el rango se ajusta a otro vector o se intercambia con otro vector, el último valor del rango, representado por ITE, no estará involucrado. Es decir, solo los elementos de ITB a uno justo antes, ITE se copiará o se intercambiará.
Rango de intercambio con todo el vector
La biblioteca de algoritmo tiene una función para intercambiar un rango en un vector con otro vector completo. La sintaxis para la función es:
ANTERSETERITER2 SWAP_RANGES (OndineIterator1 First1, ForwardIterator1 Last1, ForingIterator2 First2)
First1 representa el iterador que apunta al primer elemento del rango. Last1 representa el iterador que apunta al último elemento del rango. Este último elemento es solo un delimitador; no estará involucrado en el intercambio. First2 señala el primer elemento del vector de inserción. La función devuelve un iterador que apunta al siguiente elemento, no intercambiando todo el vector; consulte el siguiente código. El siguiente programa ilustra este intercambio con la función swap_ranges ().
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
vectorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vector:: iterator itb = vtrb.comenzar();
itb ++; itb ++;
vector:: iterator ite = vtrb.fin();
ite--; ite--; ite--;
vectorvtra = 'a', 'b', 'c', 'd', 'e';
vector:: iterator itr = swap_ranges (itb, ite, vtra.comenzar());
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
regresar 0;
La salida es:
F G A B C K L M
D
H I J D E
Observe que todo el vector no se ha cambiado. En cambio, son solo los primeros tres valores de todo el vector que se ha cambiado, con los valores del tercero, cuarto y quinto de VTRB. El sexto elemento de VTRB no estaba involucrado, y eso se esperaba.
VTRA tiene 5 elementos, mientras que VTRB tiene 8 elementos. Para cambiar realmente todo el vector, Vtra de 5 elementos, la secuencia en VTRB en cuestión, debe tener 6 elementos (con el sexto elemento como un delimitador). El siguiente programa ilustra esto:
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()
vectorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vector:: iterator itb = vtrb.comenzar();
itb ++; itb ++;
vector:: iterator ite = vtrb.fin();
ite--;
vectorvtra = 'a', 'b', 'c', 'd', 'e';
vector:: iterator itr = swap_ranges (itb, ite, vtra.comenzar());
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
regresar 0;
La salida es:
F g a b c d e m
H I J K L
Esta vez, los 5 valores de VTRA se intercambiaron con los valores del tercero, cuarto, quinto, sexto y séptimo de la VTRB. Entonces, para cambiar realmente un vector completo, el vector más largo debe tener el número correspondiente de elementos (en secuencia).
Conclusión
Cambiar dos vectores significa intercambiar el contenido de un vector con el de otro. Para que se intercambien vectores, deben ser del mismo tipo. C ++ tiene una función miembro para hacer esto. Esto significa que la función miembro swap () de un vector toma el otro vector como argumento, luego intercambia el contenido. Si el programador quiere más características de intercambio, como intercambiar a los iteradores o intercambiar un rango en un vector con la lista total de otro vector, tiene que usar la biblioteca de algoritmo.