Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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:
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:
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:
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 ;
Página 2 de 13
Preguntas varias. Nivel 1
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:
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 ) ;
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 ( ) ) ;
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:
i nt main ( ) {
l i s t <int> col1 ;
v e c t o r <int> c o l 2 ;
// 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:
i nt main ( ) {
l i s t <int> col1 ;
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 ( ) ,
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:
i nt main ( ) {
l i s t <int> c o l 1 ;
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:
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 ;
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 ( ) ) ;
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:
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 ;
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:
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 ;
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:
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:
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 ( ) ) ;
/∗ 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:
i nt main ( ) {
l i s t <char> c o l ;
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:
i nt main ( ) {
l i s t <char> c o 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:
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 ;
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
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:
i nt main ( ) {
l i s t <int> c o l ;
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:
i nt main ( ) {
l i s t <int> c o 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 ;
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:
Página 11 de 13
Preguntas varias. Nivel 1
i nt main ( ) {
s e t <int> c o 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 ;
i nt num = c o l . e r a s e ( 3 ) ;
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:
i nt main ( ) {
v e c t o r <int> c o l ;
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:
Página 12 de 13
Preguntas varias. Nivel 1
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 ;
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