stl

Upload: jose-luis-torrente

Post on 07-Jul-2015

1.153 views

Category:

Documents


0 download

TRANSCRIPT

Tema 3

TDAs contenedores bsicos

Objetivos GeneralesEntender el concepto de contenedor Conocer los principales tipos de contenedores bsicos Resolver problemas usando contenedores Entender el concepto de iterador y ser capaz de usarlos.

TDAs Contenedores Bsicos

2

Introduccin a los contenedoresContenedor: Embalaje metlico grande y recuperable, de tipos y dimensiones normalizados internacionalmente y con dispositivos para facilitar su manejo. (Diccionario RAE)TDAs Contenedores Bsicos 3

Introduccin a los contenedoresUn contenedor es una coleccin de objetos dotado de un conjunto de mtodos para gestionarlos (acceder a ellos, eliminarlos, aadir nuevos objetos, etc.). Los contenedores se pueden clasificar segn distintos criterios, pero la fundamental es la forma de organizacin: Lineal, jerrquica, interconexin totalTDAs Contenedores Bsicos 4

Introduccin a los contenedoresTambin se diferencia por las formas de acceder a los componentes: secuencial directa por clave (tambin conocidos como asociativos)

TDAs Contenedores Bsicos

5

Contenedores secuencialesOrganizan los datos en orden lineal:primer elemento, segundo, ...

Adems, quedan identificados por la posicin que ocupan en el contenedor.Vector dinmico (vector) Lista (list) Pila (stack) Cola (queue)TDAs Contenedores Bsicos 6

Contenedores directosGarantizan acceso a cualquier componente en tiempo constante:Vector dinmico (vector)

TDAs Contenedores Bsicos

7

Contenedores asociativosGestionan los datos mediante claves que los identifican (por ejemplo, DNI) y permiten su recuperacin eficiente a partir de ellas.Conjunto (set) Bolsa (multiset) Diccionario (map)

TDAs Contenedores Bsicos

8

El contenedor Pila (stack)Estructura de datos, representada como una sucesin de objetos, que limita la forma en que stos elementos se aaden a ella, as como la manera de abandonarla. Concretamente, una pila slo permite introducir y borrar elementos por un extremo de la secuencia, denominado tope (top) (Secuencias LIFO).TDAs Contenedores Bsicos 9

El contenedor Cola (queue)Contenedor, representado como una sucesin de objetos que limita la forma en que stos se aaden a ella, al igual la manera de abandonarla. As, una cola slo permite introducir objetos por un extremo de la sucesin, final, y la recuperacin por el opuesto, frente. Los elementos se ubican en estricto orden de llegada. (Secuencia FIFO).TDAs Contenedores Bsicos 10

El contenedor Cola con Prioridad (priority_queue)Tipo especial de cola en la que se siguen cumpliendo las restricciones en cuanto a los lugares por donde se realiza la insercin y acceso de los elementos. Pero en este caso los elementos no se disponen segn su orden de llegada, sino de acuerdo a algn tipo de prioridad.

TDAs Contenedores Bsicos

11

El contenedor Conjunto (set)Coleccin de valores que no se repiten y que permite conocer de manera eficiente si un valor est contenido o no en el conjunto.

TDAs Contenedores Bsicos

12

El contenedor Bolsa (multiset)Anlogo a un conjunto, pero permitiendo valores repetidos.

TDAs Contenedores Bsicos

13

El contenedor Diccionario (map)Estructura de almacenamiento que implementa una relacin ``clave-valor''. Permite almacenar valores identificados por claves nicas, y recuperarlos previamente mediante stas.

TDAs Contenedores Bsicos

14

El contenedor Vector Dinmico (vector)Generalizacin de un vector o array que almacena una coleccin de elementos del mismo tipo. Los elementos se acceden de manera directa por medio de un ndice, en el rango de 0 a n-1, siendo n el tamao del vector. Dicho tamao puede aumentarse o decrementarse segn las necesidades de manera dinmica.TDAs Contenedores Bsicos 15

El contenedor Lista (list)Contenedor que almacena sus elementos en forma de sucesin, permitiendo, por tanto, el acceso secuencial a ellos. Cada elemento establece quin es el siguiente de la sucesin.

TDAs Contenedores Bsicos

16

Abstraccin por iteracin: el concepto de iteradorSon generalizaciones de punteros: objetos que sealan a otros objetos (pero no son punteros!!). Se utilizan para iterar (moverse) sobre un rango de objetos de manera independiente del tipo de contenedor donde estn incluidos. Permitirn acceder a elementos del contenedor, modificarlos, borrarlos o insertar nuevos.TDAs Contenedores Bsicos 17

Iteradores en la STLLas clases de la STL poseen cuatro clases de iteradores dependiendo de:La forma de recorrer, o Si permite slo lecturas (L), o insertar otros nuevos o modificar ya existentes (E): iterator: hacia adelante (L, E). const_iterator: hacia adelante (L). reverse_iterator: hacia atrs (L, E). const_reverse_iterator: hacia atrs (L).TDAs Contenedores Bsicos 18

Especificacin iteradores STLEspecificaremos las operaciones de los iteradores comunes a los contenedores set, multiset, map, vector y list. Para especificar los TDAs iterator y const_iterator, utilizaremos genricamente el TDA contenedor.

TDAs Contenedores Bsicos

19

Especificacin iteradores STL (I)Declaracin de iteradores:contenedor::iterator miIterador; contenedor::const_iterator miIteradorConst;

Ejemplo:list::iterator iterListaDouble; map::const_iterator iterDiccConst;

TDAs Contenedores Bsicos

20

Especificacin iteradores STL (II)/** TDA iterator::iterator, *, ++, --, ==, !=, ~iterator El TDA iterator est asociado a un contenedor y seala los elementos de T contenidos en l. Permite recorrer el contenedor con posible modificacin del mismo, por lo que slo se puede usar con contenedores no constantes. Es mutable.TDAs Contenedores Bsicos 21

Especificacin iteradores STL

(III)

TDA const_iterator::const_iterator, *, ++, --, ==, !=, ~const_iterator El TDA const_iterador est asociado a un contenedor y seala los elementos de T contenidos en l. Permite recorrer el contenedor pero no modificarlo por lo que se puede usar tanto con contenedores constantes como no constantes. Es inmutable. */TDAs Contenedores Bsicos 22

Especificacin iteradores STL/** @brief Constructor primitivo. Crea un iterador nulo. */

(IV)

const_iterator();/** @brief Constructor de copia. @param i: iterador que se copia. Crea un iterador copia de i. */

const_iterator(const const_iterator & i);TDAs Contenedores Bsicos 23

Especificacin iteradores STL/**

(V)

@brief Obtener el elemento al que apunta el iterador. @pre El iterador NO est al final del recorrido. Es distinto de end(). @return elemento del contenedor en la posicin apuntado por el iterador. */ T operator*() const;

TDAs Contenedores Bsicos

24

Especificacin iteradores STL/** @brief Operador de incremento. @pre El iterador NO est al final del recorrido. Es distinto de end(). @return Referencia al iterador receptor.

(VI)

Hace que el iterador apunte a la posicin siguiente en el contenedor y lo devuelve. */ const_iterator & operator++();

TDAs Contenedores Bsicos

25

Especificacin iteradores STL/** @brief Operador de decremento. @pre El iterador NO est al principio del recorrido. Es distinto de begin(). @return Referencia al iterador receptor. Hace que el iterador apunte a la posicin anterior en el contenedor y lo devuelve. */ const_iterator & operator--();

(VII)

TDAs Contenedores Bsicos

26

Especificacin iteradores STL/** @brief Comparacin de igualdad. @param i: segundo iterador en la comparacin.

(VIII)

@return true, si el receptor e 'i' tienen el mismo valor. false, en otro caso. */ bool operator==(const const_iterator & i);

TDAs Contenedores Bsicos

27

Especificacin iteradores STL/** @brief Comparacin de desigualdad. @param i: segundo iterador en la comparacin.

(IX)

@return true, si el receptor e 'i' tienen un valor distinto. false, en otro caso. */ bool operator!=(const const_iterator & i);

TDAs Contenedores Bsicos

28

Especificacin iteradores STLEjemplo:template

(X)

void ImprimirContenedor (const T1& contenedor) { T1::const_iterator iter; for (iter = contenedor.begin(); iter != contenedor.end(); iter++) cout