Sei sulla pagina 1di 13

Preguntas varias.

Nivel 1

1. [01_01] Escribe un programa de prueba donde se defina utilizando la STL una lista de string.
Insertar por el final 5 elementos
Recorrer la lista para comprobar su contenido
Insertar 5 elementos por el principio
Ordenar la lista
Borrar el segundo y el penúltimo elemento
Utilizar un iterador para recorrer la lista

Solución:

#include <i o s t r e a m>


#include <i t e r a t o r >
#include < l i s t >
#include <a l g o r i t h m>
using namespace s t d ;
i nt main ( ) {
l i s t <s t r i n g > l i s t a ;
o s t r e a m i t e r a t o r <s t r i n g > out ( cout , ” , ” ) ;
l i s t a . push ba ck ( ”UNO” ) ;
l i s t a . push ba ck ( ”DOS” ) ;
l i s t a . push ba ck ( ”TRES” ) ;
l i s t a . push ba ck ( ”CUATRO” ) ;
l i s t a . push ba ck ( ”CINCO” ) ;

copy ( l i s t a . b e g i n ( ) , l i s t a . end ( ) , out ) ;

lista . push f r o n t ( ” uno ” ) ;


lista . push f r o n t ( ” dos ” ) ;
lista . push front (” tres ” ) ;
lista . push front ( ” cuatro” ) ;
lista . push front (” cinco” ) ;

l i st a . sort ();

l i s t <s t r i n g > : : i t e r a t o r i = l i s t a . b e g i n ( ) ;
++i ;
l i s t a . erase ( i ) ;

i = l i s t a . end ( ) ;
−−i ;
−−i ;
l i s t a . erase ( i ) ;
co ut << e n d l ;
i = l i s t a . begin ( ) ;
while ( i != l i s t a . end ( ) ) {
co ut << ∗ i << ” , ” ;
i ++;
}
}

2. [02_02] Crea una plantilla de función printElementos que muestre por pantalla los elementos de cualquier
colección, después de una cadena como tı́tulo, por defecto vacı́o, y separados por otra cadena, por defecto un
espacio.

Página 1 de 13
Preguntas varias. Nivel 1

Solución:

#include <i o s t r e a m>

template <typename T>


i n l i n e void p r i n t E l e m e n t o s ( const T& c o l , const char∗ t i t =” ” , const char ∗ sep=” ” ) {
typename T : : c o n s t i t e r a t o r pos ;

s t d : : co ut << t i t ;
for ( pos=c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {
s t d : : co ut << ∗ pos << sep ;
}
s t d : : co ut << s t d : : e n d l ;
}

3. [03_03] Crea un objeto función que, al llamar a su operator() le sume al valor que recibe como parámetro
(por referencia) el valor con el que fué inicializado Crea una lista de int, agrega por el final los números del 1
al 9. Con el algoritmo for_each, súmale 10 a cada elemento. Repite la operación, pero sumándole el valor del
primer elemento de la lista

Solución:

#include <i o s t r e a m>


#include < l i s t >
#include <a l g o r i t h m>
//#i n c l u d e ” p r i n t . hpp ”
template <typename T>
i n l i n e void p r i n t E l e m e n t o s ( const T& c o l , const char∗ t i t =” ” , const char ∗ sep=” ” ) {
typename T : : c o n s t i t e r a t o r pos ;

s t d : : co ut << t i t u l o O p c i o n a l ;
for ( pos=c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {
s t d : : co ut << ∗ pos << s e p a r a d o r ;
}
s t d : : co ut << s t d : : e n d l ;
}

using namespace s t d ;

c l a s s AddValue {
private :
i nt theVa lue ;
public :
AddValue ( i nt v ) : theVa lue ( v ) {
}
void operator ( ) ( i nt& elem ) const {
elem += theVa lue ;
}
};

i nt main ( ) {
l i s t <int> c o l ;

for ( i nt i =1; i <=9; ++i ) {


c o l . push ba ck ( i ) ;

Página 2 de 13
Preguntas varias. Nivel 1

printElementos ( col , ” i n i c i o : ”);

f o r e a c h ( c o l . b e g i n ( ) , c o l . end ( ) ,
AddValue ( 1 0 ) ) ;

p r i n t E l e m e n t o s ( c o l , ” d e s p u e s de a g r e g a r 1 0 : ”);

f o r e a c h ( c o l . b e g i n ( ) , c o l . end ( ) ,
AddValue ( ∗ c o l . b e g i n ( ) ) ) ;

p r i n t E l e m e n t o s ( c o l , ” d e s p u e s de a g r e g a r e l u l t i m o elemento : ” ) ;
}

4. [04_04] Dado un vector de enteros, muestra por pantalla el mayor y el menor elemento. Ordénalo. Encuentra
la posición del primer 3. Inviértelo a partir de ahı́. Muestra todos sus elementos.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <a l g o r i t h m>
using namespace s t d ;

i nt main ( ) {
v e c t o r <int> c o l ;
v e c t o r <int > : : i t e r a t o r pos ;

// i n s e r t a de 1 a 6 a r b i t r a r i a m e n t e
c o l . push ba ck ( 2 ) ;
c o l . push ba ck ( 5 ) ;
c o l . push ba ck ( 4 ) ;
c o l . push ba ck ( 1 ) ;
c o l . push ba ck ( 6 ) ;
c o l . push ba ck ( 3 ) ;

pos = min element ( c o l . b e g i n ( ) , c o l . end ( ) ) ;


co ut << ”minimo : ” << ∗ pos << e n d l ;
pos = max element ( c o l . b e g i n ( ) , c o l . end ( ) ) ;
co ut << ”maximo : ” << ∗ pos << e n d l ;

s o r t ( c o l . b e g i n ( ) , c o l . end ( ) ) ;

pos = f i n d ( c o l . b e g i n ( ) , c o l . end ( ) , 3 ) ;

r e v e r s e ( pos , c o l . end ( ) ) ;

for ( pos=c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {


co ut << ∗ pos << ’ ’ ;
}
co ut << e n d l ;
}

Página 3 de 13
Preguntas varias. Nivel 1

5. [05_05] Crea una lista de enteros, insértale por el final los números desde 1 a 9. Crea un vector de enteros de
tamaño 0 y copiale encima la lista para obtener un error de ejecución al sobreescribir elementos inexistentes.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include < l i s t >
#include <a l g o r i t h m>
using namespace s t d ;

i nt main ( ) {
l i s t <int> col1 ;
v e c t o r <int> c o l 2 ;

for ( i nt i =1; i <=9; ++i ) {


c o l 1 . push ba ck ( i ) ;
}

// ERROR DE EJECUCION ! ! !
copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
col2 . begin ( ) ) ;
}

6. [06_06] Crea una lista de enteros, insértale por el final los números desde 1 a 9. Crea un vector de enteros de
tamaño 0. Redimensiónalo para que quepan todos los elementos de la lista. Copia ahora los datos. Crea ahora
una doble cola con tamaño suficiente para que quepan los datos. Cópialos.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include < l i s t >
#include <deque>
#include <a l g o r i t h m>
using namespace s t d ;

i nt main ( ) {
l i s t <int> col1 ;
v e c t o r <int> c o l 2 ;

for ( i nt i =1; i <=9; ++i ) {


c o l 1 . push ba ck ( i ) ;
}

col2 . r es i ze ( col1 . s ize ( ) ) ;

copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
col2 . begin ( ) ) ;

deque<int> c o l 3 ( c o l 1 . s i z e ( ) ) ;

copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
col3 . begin ( ) ) ;
}

Página 4 de 13
Preguntas varias. Nivel 1

7. [07_07] Crea una lista de enteros. Inserta por el final los números del 1 al 9. Crea ahora un vector y copia
los datos agregándolos al final, (usa un back_inserter) Copia los datos del vector en una doble cola pero por
el principio (usa un front_inserter). Crea ahora un set de enteros y copia todos los valores en él (usa un
inserter).

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include < l i s t >
#include <deque>
#include <s e t >
#include <a l g o r i t h m>
using namespace s t d ;

i nt main ( ) {
l i s t <int> c o l 1 ;

for ( i nt i =1; i <=9; ++i ) {


c o l 1 . push ba ck ( i ) ;
}

v e c t o r <int> c o l 2 ;
copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
back inserter ( col2 ) ) ;

deque<int> c o l 3 ;
copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
f r o n t in s er t er ( col3 ) ) ;

s e t <int> c o l 4 ;
copy ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
i n s e r t e r ( col4 , col4 . begin ( ) ) ) ;
}

8. [08_08] Crea una lista de enteros. Inserta al final los números de 20 a 40. Busca la posición del primer elemento
que valga 3. Invierte el orden de los elementos desde ahı́ al final (observa que como no lo encontró, el iterador
devuelto estará apuntando al final, ası́ que invertirás un rango vacı́o) Encuentra las posiciones de los números
25 y 35. Muestra por pantalla el mayor valor del rango. Haz lo mismo pero ahora incluyendo tambien el último
valor.

Solución:

#include <i o s t r e a m>


#include < l i s t >
#include <a l g o r i t h m>
using namespace s t d ;

i nt main ( ) {
l i s t <int> c o l ;
l i s t <int > : : i t e r a t o r pos ;

for ( i nt i =20; i <=40; ++i ) {


c o l . push ba ck ( i ) ;
}

Página 5 de 13
Preguntas varias. Nivel 1

pos = f i n d ( c o l . b e g i n ( ) , c o l . end ( ) , 3 ) ;

r e v e r s e ( pos , c o l . end ( ) ) ;

l i s t <int > : : i t e r a t o r pos25 , po s3 5 ;


po s2 5 = f i n d ( c o l . b e g i n ( ) , c o l . end ( ) , 2 5 ) ;
po s3 5 = f i n d ( c o l . b e g i n ( ) , c o l . end ( ) , 3 5 ) ;
co ut << ”max : ” << ∗ max element ( pos25 , po s3 5 ) << e n d l ;
co ut << ”max : ” << ∗ max element ( pos25 , ++po s3 5 ) << e n d l ;
}

9. [09_09] Crea una función print, que reciba un entero como parámetro y que lo muestre por pantalla. Crea
ahora un vector de enteros y agrega al final los números del 1 al 9. Envı́a el rango completo a la función con un
algoritmo for_each

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <a l g o r i t h m>
using namespace s t d ;

void p r i n t ( i nt elem ) {
co ut << elem << ’ ’ ;
}

i nt main ( ) {
v e c t o r <int> c o l ;

for ( i nt i =1; i <=9; ++i ) {


c o l . push ba ck ( i ) ;
}

f o r e a c h ( c o l . b e g i n ( ) , c o l . end ( ) , p r i n t ) ;
co ut << e n d l ;
}

10. [10_10] Crea un objeto funcion, que tenga sobrecargado el operador () para enteros, y que realice la tarea de
mostrarlos por pantalla. Crea un vector, agrega al final los 9 primeros números y muéstralo por pantalla usando
el objeto función con un algoritmo for_each.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <a l g o r i t h m>
using namespace s t d ;

class PrintInt {
public :
void operator ( ) ( i nt elem ) const {
co ut << elem << ’ ’ ;

Página 6 de 13
Preguntas varias. Nivel 1

}
};

i nt main ( ) {
v e c t o r <int> c o l ;

for ( i nt i =1; i <=9; ++i ) {


c o l . push ba ck ( i ) ;
}

f o r e a c h ( c o l . b e g i n ( ) , c o l . end ( ) , P r i n t I n t ( ) ) ;
co ut << e n d l ;
}

11. [11_11] Crea un vector de string. Lee texto desde la entrada estandar hasta que encuentres un final de fichero e
insértalo por el final en la colección usando el algoritmo copy. Ordena la colección con el algoritmo sort Muestra
el vector por pantalla pero sin los elementos duplicados usando el algoritmo unique_copy. (Copia los datos a
un iterador de tipo ostream_iterator )

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <s t r i n g >
#include <a l g o r i t h m>
#include <i t e r a t o r >
using namespace s t d ;

i nt main ( ) {
v e c t o r <s t r i n g > c o l ;
copy ( i s t r e a m i t e r a t o r <s t r i n g >( c i n ) ,
i s t r e a m i t e r a t o r <s t r i n g > () ,
back inserter ( col ));

s o r t ( c o l . b e g i n ( ) , c o l . end ( ) ) ;
u n i q u e c o p y ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <s t r i n g >(cout , ” \n” ) ) ;
}

12. [12_12] Crea un vector de enteros. Toma un iterador apuntando a su principio. Increméntalo. Llama al algoritmo
reverse para provocar un fallo de ejecución, observa que, al estar el vector vacı́o, estaba después del supuesto
final. Inserta por el final los números del 1 al 9. Crea otro vector de enteros Copia los datos desde el primero
al segundo. Observa el fallo de ejecución, al estar sobreescribiendo datos que no existen, puesto que el segundo
vector está vacı́o. Llama al algoritmo copy tomando como inicio del rango el inicio del primero y como fin el fin
del segundo. Observa el fallo de ejecución.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <a l g o r i t h m>
using namespace s t d ;

Página 7 de 13
Preguntas varias. Nivel 1

i nt main ( ) {
v e c t o r <int> c o l 1 ;
v e c t o r <int> c o l 2 ;

/∗ ERROR DE EJECUCION ! ! !
∗ −El i n i c i o cae f u e r a d e l rango
∗/
v e c t o r <int > : : i t e r a t o r pos = c o l 1 . b e g i n ( ) ;
r e v e r s e (++pos , c o l 1 . end ( ) ) ;

for ( i nt i =1; i <=9; ++i ) {


c o l 2 . push ba ck ( i ) ;
}

/∗ ERROR DE EJECUCION ! ! !
∗ − s o b r e e s c r i b e elementos i n e x i s t e n t e s
∗/
copy ( c o l 2 . b e g i n ( ) , c o l 2 . end ( ) ,
col1 . begin ( ) ) ;

/∗ ERROR DE EJECUCION ! ! ! :
∗ − b e g i n y end c o n f u n d i d o s
∗/
copy ( c o l 1 . b e g i n ( ) , c o l 2 . end ( ) ,
c o l 1 . end ( ) ) ;
}

13. [13_13] Crea una lista de char. Agrega al final todas las letras minúsculas. Muestra por pantalla y elimina de
la lista todas las letras con un solo bucle while

Solución:

#include <i o s t r e a m>


#include < l i s t >
using namespace s t d ;

i nt main ( ) {
l i s t <char> c o l ;

for ( char c= ’ a ’ ; c<=’ z ’ ; ++c ) {


c o l . push ba ck ( c ) ;
}

while ( ! c o l . empty ( ) ) {
co ut << c o l . f r o n t ( ) << ’ ’ ;
col . pop front ( ) ;
}
co ut << e n d l ;
}

14. [14_14] Crea una lista de char. Agrega al final todas las letras minúsculas. Muestra todos los elementos con la
ayuda de un iterador.

Página 8 de 13
Preguntas varias. Nivel 1

Solución:

#include <i o s t r e a m>


#include < l i s t >
using namespace s t d ;

i nt main ( ) {
l i s t <char> c o l ;

for ( char c= ’ a ’ ; c<=’ z ’ ; ++c ) {


c o l . push ba ck ( c ) ;
}

l i s t <char > : : c o n s t i t e r a t o r pos ;


for ( pos = c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {
co ut << ∗ pos << ’ ’ ;
}
co ut << e n d l ;
}

15. [15_15] Crea un mapa de string a float. Inserta varias cadenas como clave con números como valores usando
el operador[]. Con un iterador muestra todos los pares por pantalla. Observa que cada par tiene los miembros
first y second, que en este caso corresponden a la clave y al valor.

Solución:

#include <i o s t r e a m>


#include <map>
#include <s t r i n g >
using namespace s t d ;

i nt main ( ) {
typedef map<s t r i n g , f l o a t > Str ing Flo a tMa p ;
Str ing Flo a tMa p c o l ;

col [ ”IVA” ] = 0 . 1 5 ;
col [ ” Pi ” ] = 3 . 1 4 1 5 ;
col [ ”Un numero a r b i t r a r i o ” ] = 4 9 8 3 . 2 2 3 ;
col [ ” Null ” ] = 0 ;

Str ing Flo a tMa p : : i t e r a t o r pos ;


for ( pos = c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {
co ut << ” c l a v e : \” ” << pos−> f i r s t << ” \” ”
<< ” v a l o r : ” << pos−>seco nd << e n d l ;
}
}

16. [16_16] Crea un multimap de int a string. Inserta algunos pares de enteros y cadenas, utilizando el método
insert (puedes crear pares al momento con make_pair) Muestra solamente las cadenas por pantalla con un
iterador.

Solución:

Página 9 de 13
Preguntas varias. Nivel 1

#include <i o s t r e a m>


#include <map>
#include <s t r i n g >
using namespace s t d ;

i nt main ( ) {
typedef multimap<int , s t r i n g > IntStringMMap ;

IntStringMMap c o l ;

col . i n s e r t ( ma ke pa ir ( 5 , ” marcadas ” ) ) ;
col . i n s e r t ( ma ke pa ir ( 2 , ”un” ) ) ;
col . i n s e r t ( ma ke pa ir ( 1 , ” Esto ” ) ) ;
col . i n s e r t ( ma ke pa ir ( 4 , ” de ” ) ) ;
col . i n s e r t ( ma ke pa ir ( 6 , ” s t r i n g s ” ) ) ;
col . i n s e r t ( ma ke pa ir ( 1 , ” e s ” ) ) ;
col . i n s e r t ( ma ke pa ir ( 3 , ” multimap ” ) ) ;

IntStringMMap : : i t e r a t o r pos ;
for ( pos = c o l . b e g i n ( ) ; pos != c o l . end ( ) ; ++pos ) {
co ut << pos−>seco nd << ’ ’ ;
}
co ut << e n d l ;
}

17. [17_17] Crea una lista de int. Agrega los números del 1 al 6 tanto al principio como al final. Muéstra los
elementos por pantalla usando el algoritmo copy hacia un ostream_iterator de int. Borra todos los elementos
que sean 3. Vuelve a mostrarlos por pantalla, esta vez mediante un bucle for y un iterador, separados por comas.

Solución:

#include <i o s t r e a m>


#include < l i s t >
#include <a l g o r i t h m>
#include <i t e r a t o r >
using namespace s t d ;

i nt main ( ) {
l i s t <int> c o l ;

for ( i nt i =1; i <=6; ++i ) {


col . push front ( i ) ;
c o l . push ba ck ( i ) ;
}

co ut << ” a n t e s : ” ;
copy ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;

remove ( c o l . b e g i n ( ) , c o l . end ( ) , 3 ) ;

co ut << ” d e s p u e s : ” ;
for ( l i s t <int > : : i t e r a t o r i=c o l . b e g i n ( ) ; i != c o l . end ( ) ; i ++){
co ut << ∗ i << ” , ” ;

Página 10 de 13
Preguntas varias. Nivel 1

}
co ut << e n d l ;
}

18. [18_18] Crea una lista de int. Inserta los números del 1 al 6 por el principio y por el final. Borra todos los
elementos que sean 3 y guarda en un iterador el nuevo fin de la coleccion. Muestra el nuevo contenido por
pantalla Muestra por pantalla la cantidad de elementos que han sido borrados usando el algoritmo distance
Elimina definitivamente los elementos borrados Muestra la colección completa ya sin los elementos eliminados

Solución:

#include <i o s t r e a m>


#include < l i s t >
#include <a l g o r i t h m>
#include <i t e r a t o r >
using namespace s t d ;

i nt main ( ) {
l i s t <int> c o l ;

for ( i nt i =1; i <=6; ++i ) {


col . push front ( i ) ;
c o l . push ba ck ( i ) ;
}

copy ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;

l i s t <int > : : i t e r a t o r end = remove ( c o l . b e g i n ( ) , c o l . end ( ) , 3 ) ;

copy ( c o l . b e g i n ( ) , end ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;

co ut << ”numero de e l e m e n t o s e l i m i n a d o s : ”
<< d i s t a n c e ( end , c o l . end ( ) ) << e n d l ;

c o l . e r a s e ( end , c o l . end ( ) ) ;

copy ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;
}

19. [19_19] Crea un set de int. Inserta los números del 1 al 9. Muestralos por pantalla Usa el método erase para
borrar definitivamente todos los 3, guardando en un int el número de ellos. Muestra el número en pantalla.
Muestra la colección después de haber borrado los elementos

Solución:

#include <i o s t r e a m>


#include <s e t >

Página 11 de 13
Preguntas varias. Nivel 1

#include <a l g o r i t h m>


#include <i t e r a t o r >
using namespace s t d ;

i nt main ( ) {
s e t <int> c o l ;

for ( i nt i =1; i <=9; ++i ) {


col . insert ( i );
}

copy ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;

i nt num = c o l . e r a s e ( 3 ) ;

co ut << ”numero de e l e m e n t o s e l i m i n a d o s : ” << num << e n d l ;

copy ( c o l . b e g i n ( ) , c o l . end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;
}

20. [20_20] Muestra por pantalla los elementos de un vector de int en orden inverso usando el algoritmo copy.

Solución:

#include <i o s t r e a m>


#include <v e c t o r >
#include <a l g o r i t h m>
#include <i t e r a t o r >
using namespace s t d ;

i nt main ( ) {
v e c t o r <int> c o l ;

for ( i nt i =1; i <=9; ++i ) {


c o l . push ba ck ( i ) ;
}

copy ( c o l . r b e g i n ( ) , c o l . r end ( ) ,
o s t r e a m i t e r a t o r <int >(cout , ” ” ) ) ;
co ut << e n d l ;
}

21. [21_21] Por medio del algoritmo transform, pasa todos los elementos de un set de int a un vector habiéndolos
elevado al cuadrado mediante una función

Solución:

#include <i o s t r e a m>


#include <v e c t o r >

Página 12 de 13
Preguntas varias. Nivel 1

#include <s e t >


#include <a l g o r i t h m>

i nt s q u a r e ( i nt v a l u e ) {
return v a l u e ∗ v a l u e ;
}

i nt main ( ) {
s t d : : s e t <int> col1 ;
s t d : : v e c t o r <int> c o l 2 ;

for ( i nt i =1; i <=9; ++i ) {


col1 . ins er t ( i ) ;
}

s t d : : t r a n s f o r m ( c o l 1 . b e g i n ( ) , c o l 1 . end ( ) ,
std : : b a c k i n s e r t e r ( col2 ) ,
square ) ;

Página 13 de 13

Potrebbero piacerti anche