PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... ·...

116
Programaci´ on orientada a objetos C++ PROGRAMACI ´ ON ORIENTADA A OBJETOS Biblioteca est´ andar de plantillas (STL: Standard Templates Library) Prof. Dr. Nicol´ as Luis Fern´ andez Garc´ ıa Departamento de Inform´ atica y An´ alisis Num´ erico Escuela Polit´ ecnica Superior Universidad de C´ordoba Curso acad´ emico 2011 - 2012 Universidad de C´ordoba: Escuela Polit´ ecnica Superior Grado en Ingenier´ ıa Inform´ atica 1/ 116

Transcript of PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... ·...

Page 1: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

PROGRAMACION ORIENTADA A OBJETOSBiblioteca estandar de plantillas

(STL: Standard Templates Library)

Prof. Dr. Nicolas Luis Fernandez Garcıa

Departamento de Informatica y Analisis NumericoEscuela Politecnica Superior

Universidad de Cordoba

Curso academico 2011 - 2012

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 1 / 116

Page 2: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido del tema

1 Biblioteca estandar de plantillas (STL)

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 2 / 116

Page 3: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 3 / 116

Page 4: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Definicion

Definicion (Contenedor)

Un contenedor es un objeto que contiene otros objetos.

Ejemplos

Las listas, vectores y los conjuntos (sets) son ejemplos decontenedores.

Acciones

Se pueden anadir, consultar y eliminar objetos de un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 4 / 116

Page 5: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Definicion

Definicion (Contenedor)

Un contenedor es un objeto que contiene otros objetos.

Ejemplos

Las listas, vectores y los conjuntos (sets) son ejemplos decontenedores.

Acciones

Se pueden anadir, consultar y eliminar objetos de un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 5 / 116

Page 6: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Definicion

Definicion (Contenedor)

Un contenedor es un objeto que contiene otros objetos.

Ejemplos

Las listas, vectores y los conjuntos (sets) son ejemplos decontenedores.

Acciones

Se pueden anadir, consultar y eliminar objetos de un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 6 / 116

Page 7: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Tipos de contenedores

Tipos de contenedores

Contenedores de secuencia:

Almacenan los elementos en posiciones contiguas de memoria

Contenedores asociativos:

Permite el acceso a los elementos mediante claves.

Adaptadores de contenedores:

Se definen a partir de los contenedores de primera clase,utilizando solo algunas de sus caracterısticas.

“Casi”contenedores:

No poseen todas las capacidades de los contenedores deprimera clase.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 7 / 116

Page 8: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Tipos de contenedores

Definicion (Contenedores de primera clase)

Se denominan contenedores de primera clase a los contenedoresde secuencia y a los contenedores asociativos.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 8 / 116

Page 9: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Tipos de contenedores

Tipos de contenedores

Contenedores de secuencia:

vector: array unimidensionallist: lista doblemente enlazadadeque: cola con doble extremo

Contenedores asociativos:

set: conjuntomultiset: multiconjunto o bolsa (con duplicados).map: array asociativomultimap: array asociativo (con duplicados).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 9 / 116

Page 10: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Tipos de contenedores

Tipos de contenedores

Adaptadores de contenedores:

stack: pilaqueue: colapriority queue: cola con prioridad

“Casi” contenedores:

Array del tipo del lenguaje Cstring: cadena de caracteresbibset: conjunto de mapas de bitsvalarray: permite operaciones vectoriales matematicas de altavelocidad.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 10 / 116

Page 11: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Ficheros de cabecera

Ficheros de cabecera<vector>: vector.

<list>: list.

<deque>: deque.

<set>: set y multiset.

<map>: map y multimap.

<stack>: stack.

<queue>: queue y priority queue.

<string>: string

<bitset>: bibset

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 11 / 116

Page 12: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Funciones miembro

Funciones miembro de los contenedores (1/2)

Constructor predeterminado y constructor de copia

Destructor

c.empty(): devuelve true si no hay elementos; en caso contrario,false

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 12 / 116

Page 13: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Funciones miembro

Funciones miembro de los contenedores (2/2)

c.max size(): devuelve el numero maximo de elementos delcontenedor.

c.size(): devuelve el numero de elementos actuales del contenedor

c.resize(): modifica el tamano de un contenedor de secuencia.Solo valido para “vector, list, y deque”

c1.swap(c2): intercambia los elementos de los contenedores c1 yc2.

operator=: asigna un contenedor a otro.

donde c, c1 y c2 representan contenedores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 13 / 116

Page 14: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operadores relacionales

Operadores relacionales entre contenedores

operator<: operador “menor que” entre contenedores.

operator<=: operador “menor o igual que” entre contenedores.

operator>: operador “mayor que” entre contenedores.

operator>=: operador “mayor o igual que” entre contenedores.

operator==: operador “igual que” entre contenedores.

operator! =: operador “distinto” entre contenedores.

Nota

El contenedor priority queue no dispone de los operadoresrelacionales

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 14 / 116

Page 15: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operadores relacionales

Operadores relacionales entre contenedores

operator<: operador “menor que” entre contenedores.

operator<=: operador “menor o igual que” entre contenedores.

operator>: operador “mayor que” entre contenedores.

operator>=: operador “mayor o igual que” entre contenedores.

operator==: operador “igual que” entre contenedores.

operator! =: operador “distinto” entre contenedores.

Nota

El contenedor priority queue no dispone de los operadoresrelacionales

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 15 / 116

Page 16: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operadores relacionales

Nota

Mas adelante se describiran los operadores relacionales que puedenser utilizados por los iteradores que apuntan a los elementos delos contenedores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 16 / 116

Page 17: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Iteradores

Iteradores de los contenedores de primera clase

c.begin(): devuelve un iterator o const iterator que hacereferencia al primer elemento.

c.end(): devuelve un iterator o const iterator que hace referenciaa la siguiente posicion despues del final del contenedor.

c.rbegin(): devuelve un reverse iterator o const reverse iteratorque hace referencia al ultimo elemento.

c.rend(): devuelve un reverse iterator o const reverse iteratorque hace referencia a la posicion anterior al primer elemento.

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 17 / 116

Page 18: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operaciones de borrado

Operaciones de borrado en un contenedor de primera clase

c.erase:

c.erase(x): elimina el elemento con valor x.c.erase(p): elimina el elemento apuntado por el iterador p.c.erase(primero,ultimo): elimina los elementos del intervalo[primero,ultimo)

c.clear(): elimina todos los elementos del contenedor.

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 18 / 116

Page 19: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operaciones en los extremos(1/2)

Operaciones al final de vectores, listas, deques, pilas y colas

c.push back(): anade al final.

c.pop back(): elimina el ultimo elemento.

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 19 / 116

Page 20: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores: Operaciones en los extremos(2/2)

Operaciones al principio de listas y deques

c.push front(): anade un primer elemento nuevo

c.pop front(): elimina el primer elemento

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 20 / 116

Page 21: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 21 / 116

Page 22: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Tipos

Tipos de contenedores de secuencia

vector: array unidimensional.

list: lista doblemente enlazada.

deque: array unidimensional de doble extremo.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 22 / 116

Page 23: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Acceso a los elementos

Modos de acceso a elementos

c.front(): primer elemento.

c.back(): utimo elemento.

Indexacion de elementos (solo valido para “vector” y “deque”)

c.[i]: indexacion del elemento i-esimo; acceso sin verificacionc.at(i): indexacion elemento i-esimo; acceso con verificacion

donde c representa un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 23 / 116

Page 24: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Funciones miembro

Funciones miembro (1/2)

assign:

c.assign(primero,ultimo);asigna a c los elementos de otro contenedor indicados por lositeradores [primero,ultimo).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 24 / 116

Page 25: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Funciones miembro

Funciones miembro (2/2)

insert:

c.insert(c.begin(), 0);Inserta el valor 0 en la posicion indicada del contenedor.c.insert(c.begin(), 5, 0);Inserta 5 veces el valor 0 a partir de la posicion indicada delcontenedor.c1.insert(c1.begin(),c2.begin(),c2.end());Inserta en c1, a partir de la posicion c1.begin(), los elementosde c2 indicados en el rango de valores [c2.begin(),c2.end()).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 25 / 116

Page 26: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Vector

Definicion (vector)

Un vector es un array unidimensional con posiciones contiguas dememoria.

Ejemplos

vector<int> v;

vector<double> temperatura(10);

vector<Donante> donantes(persona.begin(),personas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 26 / 116

Page 27: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Vector

Definicion (vector)

Un vector es un array unidimensional con posiciones contiguas dememoria.

Ejemplos

vector<int> v;

vector<double> temperatura(10);

vector<Donante> donantes(persona.begin(),personas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 27 / 116

Page 28: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Vector

Caracerısticas del contenedor vector

Se recomienda su uso si los datos deben ordenarse y serfacilmente accesibles.

Se puede recorrer con iteradores de acceso aleatorio o directousando los operadores de subındice [] o at

Si la memoria asignada a un vector se agota entonces:1 Se le asigna un area contigua mas extensa2 Se copian los elementos originales.3 Se suprime la asignacion a la memoria anterior.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 28 / 116

Page 29: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Vector

Funciones miembro de vectorEl contenedor vector posee

Las funciones miembro comunes a todos contenedores.

En particular

v.push back(): anade al final.v.pop back(): elimina el ultimo elemento.

Las funciones miembro comunes a los contenedores de secuencia.

En particular las de acceso aleatorio v.[i] y v.at(i).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 29 / 116

Page 30: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Vector

Funciones miembro especıficas de vector

c.capacity(): espacio asignado.

c.reserve(): reserva espacio para expansiones futuras.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 30 / 116

Page 31: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Definicion (list)

Un contenedor list es una lista doblemente enlazada.

Ejemplos

list<int> lista enteros;

list<double> notas(30);

list<Mensaje> lista mensajes(avisos.begin(),avisos.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 31 / 116

Page 32: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Definicion (list)

Un contenedor list es una lista doblemente enlazada.

Ejemplos

list<int> lista enteros;

list<double> notas(30);

list<Mensaje> lista mensajes(avisos.begin(),avisos.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 32 / 116

Page 33: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Caracterısticas del contenedor list

Permite la insercion y eliminacion en cuaquier posicion delcontenedor.

Se implementa como una lista doblemente enlazada.

Se puede recorrer con iteradores bidireccionales.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 33 / 116

Page 34: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Funciones miembro de listEl contenedor list posee

Las funciones miembro comunes a todos contenedores.

En particular

lista.push back(): anade al final.lista.pop back(): elimina el ultimo elemento.lista.push front(): anade un primer elemento nuevolista.pop front(): elimina el primer elemento

Las funciones miembro comunes a los contenedores de secuencia.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 34 / 116

Page 35: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Funciones miembro especıficas de list (1/2)merge:

lista1.merge(lista2);Elmina los elementos de lista2 y los anade al final de lista1.

remove:

lista1.remove(4);Elmina los elementos de lista1 iguales a 4

remove if:lista1.remove if(predicado);Elmina los elementos de lista1 que hagan verdadero elpredicado

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 35 / 116

Page 36: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: List

Funciones miembro especıficas de list (2/2)

sort:

lista1.sort();Ordena los elementos de lista1.

splice:

lista1.splice(lista1.end(),lista2);Elmina los elementos de lista2 y los anade al final de lista1.

unique:

lista1.unique();Elmina los elementos contiguos y duplicados de lista1.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 36 / 116

Page 37: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Deque

Definicion (deque)

Un contenedor deque es un array unidimensional de doble entrada.

Ejemplos

deque<int> deque enteros;

deque<double> datos(100);

deque<Deportista>clasificacion ciclistas(deportistas.begin(),deportistas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 37 / 116

Page 38: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Deque

Definicion (deque)

Un contenedor deque es un array unidimensional de doble entrada.

Ejemplos

deque<int> deque enteros;

deque<double> datos(100);

deque<Deportista>clasificacion ciclistas(deportistas.begin(),deportistas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 38 / 116

Page 39: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Deque

Caracterısticas del contenedor deque

Permite la insercion y eliminacion al principio y al final delcontenedor.

Se implementa como un array unidimensional con posicionesno necesarimente contiguas..

Se puede recorrer con iteradores de acceso aleatorio.

El termino deque se pronuncia “diik”.

El contenedor deque es la implementacion subyacente para eladaptador de cola queue.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 39 / 116

Page 40: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores de secuencia: Deque

Funciones miembro de deque

El contenedor deque posee

Las funciones miembro comunes a todos contenedores.

En particular

d.push back(): anade al final.d.pop back(): elimina el ultimo elemento.d.push front(): anade un primer elemento nuevod.pop front(): elimina el primer elemento

Las funciones miembro comunes a los contenedores de secuencia.

En particular las de acceso aleatorio d.[i] y d.at(i).

donde d es un contenedor deque.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 40 / 116

Page 41: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 41 / 116

Page 42: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Introduccion

Contenedores asociativos

set: conjunto (sin duplicados).

multiset: multiconjunto o bolsa (permite duplicados).

map:

Array asociativo compuesto por pares de elementosNo permite duplicados: asocia un unico valor a cada claveunica.

multimap:

Array asociativo compuesto por pares de elementosPermite duplicados: puede asociar varios valores a una clave.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 42 / 116

Page 43: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Funcion miembro

Funcion miembro especıfica

c.insert(x): anade x al contenedor asociativo c.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 43 / 116

Page 44: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Set

Definicion (set)

Un contenedor set representa un conjunto con los elementosordenados.

Ejemplos

set<int> conjunto enteros;

set<Persona>conjunto amigos(personas.begin(),personas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 44 / 116

Page 45: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Set

Definicion (set)

Un contenedor set representa un conjunto con los elementosordenados.

Ejemplos

set<int> conjunto enteros;

set<Persona>conjunto amigos(personas.begin(),personas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 45 / 116

Page 46: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Set

Caracterısticas del contenedor set

Se utiliza para almacenar y recuperar claves unicas

No posee elementos duplicados.

Se puede recorrer con iteradores de bidireccionales, pero nocon los iteradores de acceso aleatorio.

Generalmente se implementa como un arbol binario debusqueda.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 46 / 116

Page 47: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multiset

Definicion (multiset)

Un contenedor multiset representa una bolsa con los elementosordenados.

Ejemplos

multiset<int> bolsa enteros;

multiset<Fecha> bolsa reunion(fechas.begin(),fechas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 47 / 116

Page 48: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multiset

Definicion (multiset)

Un contenedor multiset representa una bolsa con los elementosordenados.

Ejemplos

multiset<int> bolsa enteros;

multiset<Fecha> bolsa reunion(fechas.begin(),fechas.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 48 / 116

Page 49: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multiset

Caracterısticas del contenedor multiset

Se utiliza para almacenar y recuperar claves que no son unicas

Permite elementos duplicados.

Se puede recorrer con iteradores de bidireccionales, pero nocon los iteradores de acceso aleatorio.

Generalmente se implementa como un arbol binario debusqueda.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 49 / 116

Page 50: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Map

Definicion (map)

Un contenedor map representa un conjunto de pares de elementosordenados.

Ejemplos

map<int,string> conjunto dni personas;

map<Par> conjunto pares(pares.begin(),pares.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 50 / 116

Page 51: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Map

Definicion (map)

Un contenedor map representa un conjunto de pares de elementosordenados.

Ejemplos

map<int,string> conjunto dni personas;

map<Par> conjunto pares(pares.begin(),pares.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 51 / 116

Page 52: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Map

Caracterısticas del contenedor map

El primer elemento del par representa la clave y el segundo, elvalor.

Se utiliza para almacenar y recuperar claves que son unicas

No permite elementos duplicados.

Se puede recorrer con iteradores de bidireccionales, pero nocon los iteradores de acceso aleatorio.

Generalmente se implementa como un arbol binario debusqueda.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 52 / 116

Page 53: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multimap

Definicion (multimap)

Un contenedor multimap representa una bolsa de pares deelementos ordenados.

Ejemplos

multimap<int,string> bolsa dni personas;

multimap<Par> bolsa pares(pares.begin(),pares.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 53 / 116

Page 54: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multimap

Definicion (multimap)

Un contenedor multimap representa una bolsa de pares deelementos ordenados.

Ejemplos

multimap<int,string> bolsa dni personas;

multimap<Par> bolsa pares(pares.begin(),pares.end());

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 54 / 116

Page 55: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Contenedores asociativos: Multimap

Caracterısticas del contenedor multimap

El primer elemento del par representa la clave y el segundo, elvalor.

Se utiliza para almacenar y recuperar claves que no son unicas

Permite elementos duplicados.

Se puede recorrer con iteradores de bidireccionales, pero nocon los iteradores de acceso aleatorio.

Generalmente se implementa como un arbol binario debusqueda.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 55 / 116

Page 56: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 56 / 116

Page 57: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Stack

Definicion (stack)

Un contenedor stack representa una pila elementos.

Ejemplo

stack<int> pila enteros 1; // basada en deque

stack<int, vector<int> > pila enteros 2; // basada en vector

stack<int, list<int> > pila enteros 3; // basada en list

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 57 / 116

Page 58: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Stack

Definicion (stack)

Un contenedor stack representa una pila elementos.

Ejemplo

stack<int> pila enteros 1; // basada en deque

stack<int, vector<int> > pila enteros 2; // basada en vector

stack<int, list<int> > pila enteros 3; // basada en list

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 58 / 116

Page 59: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Stack

Caracterısticas del contenedor stack

Representa una pila de elementos: el ultimo en entrar es elprimero en salir.

Se puede implementar con cualquier contenedor de secuencia:vector, list, deque.

La implementacion subyacente predeterminada de la pila escon deque.

No posee iteradores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 59 / 116

Page 60: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Stack

Funciones miembro de stackEl contenedor stack posee

Las funciones miembro comunes a todos contenedores.

En particular

pila.empty(): anade al final.pila.size(): elimina el ultimo elemento.Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 60 / 116

Page 61: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Stack

Funciones miembros especıficas de stack

pila.push(): inserta un elemento en la cima de la pila.

pila.pop(): extrae el elemento situado en la cima de la pila.

pila.top(): consulta el elemento situado en la cima de la pila.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 61 / 116

Page 62: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Queue

Definicion (queue)

Un contenedor queue representa una cola elementos.

Ejemplo

queue<int> cola enteros 1; // basada en deque

queue<int, list<int> > cola enteros 2; // basada en list

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 62 / 116

Page 63: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Queue

Definicion (queue)

Un contenedor queue representa una cola elementos.

Ejemplo

queue<int> cola enteros 1; // basada en deque

queue<int, list<int> > cola enteros 2; // basada en list

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 63 / 116

Page 64: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Queue

Caracterısticas del contenedor queue

Representa una cola de elementos: el primero en entrar es elprimero en salir.

Se puede implementar con los contenedores de secuencia list odeque.

La implementacion subyacente predeterminada de la cola escon deque.

No posee iteradores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 64 / 116

Page 65: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Queue

Funciones miembro de queue

El contenedor queue posee

Las funciones miembro comunes a todos contenedores.

En particular

cola.empty(): anade al final.cola.size(): elimina el ultimo elemento.Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 65 / 116

Page 66: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Queue

Funciones miembros especıficas de queue

cola.push(): inserta un elemento al final de la cola.

cola.pop(): extrae el primer elemento de la cola.

cola.front(): consulta el primer elemento de la cola

cola.back(): consulta el ultimo elemento de la cola

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 66 / 116

Page 67: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Priority queue

Definicion (priority queue)

Un contenedor priority queue representa una cola elementos conprioridades.

Ejemplo

priority queue<int> prioridades enteros 1; // basada envector

priority queue<int, deque<int> > prioridades enteros 2; //basada en deque

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 67 / 116

Page 68: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Priority queue

Definicion (priority queue)

Un contenedor priority queue representa una cola elementos conprioridades.

Ejemplo

priority queue<int> prioridades enteros 1; // basada envector

priority queue<int, deque<int> > prioridades enteros 2; //basada en deque

Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 68 / 116

Page 69: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Priority queue

Caracterısticas del contenedor priority queue

Representa una cola de elementos: se hacen insercionesordenadas y siempre se extrae por su parte inicial.

Se puede implementar con los contenedores de secuenciavector o deque.

La implementacion subyacente predeterminada de la cola conprioridades es con vector.

No posee iteradores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 69 / 116

Page 70: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Priority queue

Funciones miembro de priority queue

El contenedor priority queue posee

Las funciones miembro comunes a todos contenedores.

En particular

cola.empty(): anade al final.cola.size(): elimina el ultimo elemento.Etc.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 70 / 116

Page 71: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Adaptadores de contenedores: Priority queue

Funciones miembros especıficas de priority queue

cola prioridades.push(): inserta un elemento en la colateniendo en cuenta su prioridad.

cola prioridades.pop(): extrae el primer elemento de la cola.

cola prioridades.front(): consulta el primer elemento de lacola

cola prioridades.back(): consulta el ultimo elemento de lacola

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 71 / 116

Page 72: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 72 / 116

Page 73: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores

Tipos de iteradores

iterator: iterador que apunta al tipo de elemento almacenado en uncontenedor.

const iterator: iterador constante que apunta al tipo de elementoalmacenado en un contenedor; solo se puede usar para la leerelementos.

reverse iterator: iterador inverso que apunta al tipo de elementoalmacenado en un contenedor; permite iterar en sentido inverso.

const reverse iterator: iterador inverso y constante que apunta altipo de elemento almacenado en un contenedor; permite iterar ensentido inverso; solo se puede usar para la leer elementos.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 73 / 116

Page 74: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores

Tipos de iteradores

Tipo de iterador Direccion de ++ Capacidaditerator avance lectura y escritura

const iterator avance lecturareverse iterator retroceso lectura y escritura

const reverse iterator retroceso lectura

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 74 / 116

Page 75: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores

Categorıa de los iteradores

Categorıa Capacidad Movimiento PasadasEntrada Lectura Adelante UnaSalida Escritura Adelante UnaAvance Lectura y escritura Adelante UnaBidireccional Lectura y escritura Adelante y atras VariasAleatorio Lectura y escritura Directo, adelante y

atrasVarias

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 75 / 116

Page 76: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones de todos los iteradores de los contenedores

Tipo de operacion Descripcion++p incremento previo del iteradorp++ incremento posterior del iterador

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 76 / 116

Page 77: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones de los iteradores de entrada

Tipo de operacion Descripcion*p acceso al contenido del iterador

(para usar su valor, rvalue)p1 = p2 asginar el iterador p2 al iterador p1

p1 == p2 igualdad de iteradoresp1 != p2 desigualdad de iteradores

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 77 / 116

Page 78: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones de los iteradores de salida

Tipo de operacion Descripcion*p acceso al contenido del iterador

(para asignarle un valor, lvalue)p1 = p2 asginar el iterador p2 al iterador p1

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 78 / 116

Page 79: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones de los iteradores de avance

Los iteradores de avance poseen todos las operaciones de lositeradores de entrada y de salida

Operaciones adicionales de los iteradores bidireccionales

Tipo de operacion Descripcion−−p decremento previo del iteradorp−− decremento posterior del iterador

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 79 / 116

Page 80: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones adicionalesde los iteradores de acceso aleatorio (1/2)

Tipo de operacion Descripcionp += i incrementar el iterador p en i posicionesp -= i decrementar el iterador p en i posicionesp + i crea un iterador situado en p incrementado

en i posicionesp - i crea un iterador situado en p decrementado

en i posicionesp[i] contenido del elemento referenciado por p in-

crementado en i posiciones

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 80 / 116

Page 81: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Operaciones de los iteradores

Operaciones adicionalesde los iteradores de acceso aleatorio (2/2)

Tipo de operacion Descripcionp1 < p2 devuelve true si p1 se encuentra antes que p2

p1 <= p2 devuelve true si p1 se encuentra antes o en lamisma posicion que p2

p1 > p2 devuelve true si p1 se encuentra despues quep2

p1 >= p2 devuelve true si p1 se encuentra despues o enla misma posicion que p2

p1 == p2 devuelve true si p1 se encuentra en la mismaposicion que p2

p1 ! = p2 devuelve true si p1 se encuentra en una posi-cion diferente que p2

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 81 / 116

Page 82: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Iteradores: Iteradores de los contenedores

Tipo de iterador soportado por los contenedores

Contenedor Tipo de iteradorvector acceso aleatorio

deque acceso aleatorio

list bidireccional

set bidireccional

multiset bidireccional

map bidireccional

multimap bidireccional

stack no soporta iterador

queue no soporta iterador

priority queue no soporta iterador

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 82 / 116

Page 83: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 83 / 116

Page 84: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Argumentos de los algoritmos

Argumentos de los algoritmos: iteradores bidireccionales o deacceso aleatorio

Algunos de los argumentos de los algoritmos son pares deiteradores que limitan los elementos del contenedor:

Iterador que apunta al primer elemento que se quiere procesardel contenedor.Iterador que apunta a la posicion situada despues del ultimoelemento que se quiere procesar del contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 84 / 116

Page 85: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Argumentos de los algoritmos

Argumentos de los algoritmos: iteradores bidireccionales o deacceso aleatorio

Ejemplo

algoritmo(c.begin(),c.end(), ...);

donde c es un contenedor y

c.begin(): iterador que apunta al primer elemento delcontenedor.

c.end(): iterador que apunta a la posicion situada despues delultimo elemento del contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 85 / 116

Page 86: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase

Algoritmos sobre contenedores de <algorithm>

Algoritmos invariantes: realizan una consulta sobre elcontenedor.

Algoritmos modificadores: modifican el contenido delcontenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 86 / 116

Page 87: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes

Tipos de algoritmos invariantes

1 Iterador: for each.

2 Busqueda en un contenedor no ordenado: find, find if, ...

3 Busqueda en un contenedor ordenado: binary search,lower range, ...

4 Contar y comparar: count, equal, ...

5 Busqueda de subsecuencias ordenadas: search.

6 Inclusion: includes.

7 Maximo y mınimo: max element, min element.

8 Numericos: accumulate, inner product.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 87 / 116

Page 88: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(1/8)

Algoritmo iterador

for each: simula la ejecucion de un bucle que aplica una funcion alos elementos del contenedor.

Nota

Este algoritmo sera invariante o modificador segun el tipo deaccion que realice la funcion sobre los elementos del contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 88 / 116

Page 89: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(2/8)

Busqueda en un contenedor no ordenado

find: devuelve un iterador al primer elemento que coincida con unvalor.

find if: devuelve un iterador al primer elemento que haga verdaderoa un predicado.

find first of: devuelve un iterador al primer elemento del primercontenedor que coincide con un elemento del segundo contenedor (oque hacen verdadero un predicado).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 89 / 116

Page 90: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(3/8)

Busqueda en un contenedor ordenado

binary search: busca un elemento en un contenedor ordenado quesea igual a un valor o que haga verdadero un predicado.

lower bound: busca el primer elemento en un contenedor ordenadoque sea igual a un valor o que haga verdadero un predicado.

upper bound: busca el ultimo elemento en un contenedor ordenad0que sea igual a un valor o que haga verdadero un predicado.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 90 / 116

Page 91: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(4/8)

Contar y comparar

count: cuenta las ocurrencias de un valor en un contenedor.

count if: cuenta el numero de elementos que hacen verdadero a unpredicado.

equal: comprueba si son iguales dos contenedores (o si loselementos hacen verdadero a un predicado).

mismatch: busca el primer el primer par de elementos que sondiferentes (o hacen falso a un predicado) en dos contenedores ydevuelve iteradores a dichos elementos.

lexicographical compare: compara lexicograficamente doscontenedores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 91 / 116

Page 92: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(5/8)

Busqueda de subsecuencias

search: busca la segunda secuencia como subsecuencia de laprimera secuencia; devuelve un iterador al primer elementocoincidente de la primera secuencia.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 92 / 116

Page 93: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(6/8)

Inclusion

includes: determina si todos los elementos del segundo contenedorpertenecen al primer contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 93 / 116

Page 94: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(7/8)

Maximo y mınimo

max element: busca el elemento maximo.

min element: busca el elemento mınimo.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 94 / 116

Page 95: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmos invariantes(8/8)

Algoritmos numericos de <numeric>

accumulate: acumula resultados de una operacion sobre uncontenedor.

inner product: acumula resultados de una operacion sobre doscontenedoresla operacion por defecto es la multiplicacion, obteniendose elproducto escalar.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 95 / 116

Page 96: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmo modificador

Algoritmo modificador

1 Intercambiar: swap.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 96 / 116

Page 97: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos de contenedores de primera clase: Algoritmo modificador

Intercambiar

swap: intercambia los elementos de dos contenedores.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 97 / 116

Page 98: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 98 / 116

Page 99: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia

Algoritmos sobre contenedores de secuencia de <algorithm>

Algoritmos invariantes: relizan una consulta sobre elcontenedor de secuencia.

Algoritmos modificadores: modifican el contenido delcontenedor de secuencia.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 99 / 116

Page 100: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos invariantes

Tipos de algoritmos invariantes adicionales

1 Busqueda en una secuencia no ordenada: adjacent find.

2 Busqueda en una secuencia ordenada: equal range.

3 Busqueda de subsecuencias ordenadas: search n, find end

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 100 / 116

Page 101: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos invariantes(1/3)

Busqueda en una secuencia no ordenada

adjacent find: busca dos elementos adyacentes que coincidan (oque hagan verdadero un predicado).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 101 / 116

Page 102: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos invariantes(2/3)

Busqueda en una secuencia ordenada

equal range: busca el primer y el ultimo elemento en una secuenciaordenada que sean iguales a un valor o que haga verdadero unpredicado.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 102 / 116

Page 103: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos invariantes(3/3)

Busqueda de subsecuencias

search n: encuentra una secuencia de, al menos, n coincidencias desu parametro valor en la secuencia; devuelve un iterador al primerelemento de la secuencia de n coincidencias.

find end: busca la segunda secuencia como subsecuencia de laprimera secuencia; devuelve un iterador que apunta a la ultimacoincidencia en la primera secuencia (es decir, “search al reves”).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 103 / 116

Page 104: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores

Tipos de algoritmos modificadores adicionales

1 Copiar y asignar: copy, fill, generate, ...

2 Intercambiar: swap ranges, iter swap, partition, ...

3 Permutar: random shuffle, next permutation, prev permutation.

4 Borrar y copiar: remove copy, unique copy, ...

5 Sustituir: replace,...

6 Invertir y rotar: reverse, rotate, ...

7 Ordenar: sort, stable sort, ...

8 Fusionar: merge, inplace merge

9 Sumas y diferencias parciales: suma partial, adjacent difference.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 104 / 116

Page 105: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(1/9)

Copiar y asignar

copy: copia una secuencia en otra.

copy backward: copia una secuencia comenzando por la parte finalde la otra.

fill: asigna a los elementos un valor indicado.

fill n: asigna a los “n” primeros elementos un valor indicado.

generate: asigna a los elementos valores proporcionados por unafuncion.

generate n: asigna a los “n” primeros elementos valoresproporcionados por una funcion.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 105 / 116

Page 106: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(2/9)

Intercambiar

swap ranges: intercambia los elementos especificados en los rangosde entrada.

iter swap: intercambia los elementos apuntados por los parametrositeradores.

partition: coloca al principio los elementos que satisfacen unpredicado (no se respeta el orden relativo de los elementos con igualvalor).

stable partition: coloca al principio los elementos que satisfacen unpredicado (respeta el orden relativo de los elementos con igualvalor).

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 106 / 116

Page 107: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(3/9)

Permutar

random shuffle: permuta aleatoriamente los elementos.

next permutation: si existe la siguiente permutacion lexicografica,la genera; en caso contrario, devuelve false.

prev permutation: si existe la anterior permutacion lexicografica,la genera; en caso contrario, devuelve false.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 107 / 116

Page 108: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(4/9)

Borrar y copiar

remove copy: realiza una copia pero omite los elementos con unvalor indicado.

remove copy if: realiza una copia pero omite los elementos quehagan verdadero un predicado.

unique copy: realiza una copia sin duplicados.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 108 / 116

Page 109: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(5/9)

Sustituir

replace: sustituye los elementos con un valor indicado por un nuevovalor.

replace if: sustituye los elementos que hagan verdadero unpredicado por un nuevo valor.

replace copy: realiza una copia sustituyendo los elementos con unvalor indicado por un nuevo valor.

replace copy if: realiza una copia sustituyendo los elementos quehagan verdadero un predicado por un nuevo valor.

transform: copia en otra secuencia una transformacion de suentrada basada en una operacion suministrada por el usuario.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 109 / 116

Page 110: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(6/9)

Invertir y rotar

reverse: invierte el orden de los elementos

reverse copy: produce una copia con los elementos en orden inverso

rotate: rota los elementos de forma que el elemento elegido pasa aser el primer elemento.

El elemento de la posicion primero + ise traslada a la posicionprimero + (i + (ultimo - elegido)) % (ultimo - primero)

rotate copy: hace una copia con los elementos rotados, de formaque que el elemento elegido pasa a ser el primer elemento.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 110 / 116

Page 111: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(7/9)

Ordenar un vector o deque

sort: ordena los elementos de la secuencia.

stable sort: ordena los elementos de la secuencia respetando elorden relativo.

partial sort: solo garantiza la ordenacion de los primeros elementosde la secuencia.

partial sort copy: solo garantiza la ordenacion de los primeroselementos de la secuencia y el resultado lo copia en otra secuencia.El tamano de la segunda secuencia determina cuantos elementos sevan a ordenar.

nth element: se garantiza que el n-esimo elemento esta en el lugarque le corresponderıa si la secuencia estuviera ordenada.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 111 / 116

Page 112: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(8/9)

Fusionar o mezclar secuencias ordenadas

merge: fusiona dos secuencias ordenadas y el resultado lo copia enotra secuencia.

inplace merge: fusiona dos partes ordenadas de un contenedor.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 112 / 116

Page 113: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores de secuencia: Algoritmos modificadores(9/9)

Algoritmos numericos adicionales de <numeric>

partial sum: dada la secuencia a, b, c, d, ..., se genera la secuenciaa, a + b, a + b + c, a + b + c + d,...

adjacent difference: dada la secuencia a, b, c, d, ..., se genera lasecuencia a, b - a, c - b, d - c,...

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 113 / 116

Page 114: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Contenido de la seccion

1 Biblioteca estandar de plantillas (STL)ContenedoresContenedores de secuenciaContenedores asociativosAdaptadores de contenedoresIteradoresAlgoritmos de contenedores de primera claseAlgoritmos adicionales sobre contenedores de secuenciaAlgoritmos adicionales sobre contenedores asociativos

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 114 / 116

Page 115: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Biblioteca estandar de plantillas (STL)Algoritmos adicionales sobre contenedores asociativos: Algoritmos de conjuntos

Union e interseccion

set union: realiza la union de dos contenedores ordenados.

set intersection: realiza la interseccion de dos contenedoresordenados.

set difference: diferencia del primer contenedor menos el segundo,ambos ordenados.

set symmetric difference: diferencia simetrica de dos contenedoresordenados.

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 115 / 116

Page 116: PROGRAMACION ORIENTADA A OBJETOS - UCOma1fegan/2011-2012/poo/practicas/ejemplos/... · 2012-04-25 · Programaci on orientada a objetos C++ PROGRAMACION ORIENTADA A OBJETOS Biblioteca

Programacion orientada a objetos C++

Muchas gracias

Universidad de Cordoba: Escuela Politecnica Superior Grado en Ingenierıa Informatica 116 / 116